AttributeError:' NoneType'对象没有属性' get_food'蟒蛇

时间:2015-08-02 23:28:39

标签: python factory abstract

我使用抽象工厂模式 我有三个类,分开的脚本

class Dog1:

    def speak(self):
        return "Woof!"

    def __str__(self):
        return "Dog"


from dog1 import Dog1

class DogFactory(Dog1):

    def get_pet(self):
        return Dog1()


    def get_food(self):
        return "Dog food!"



from dog_factory import DogFactory

class PetStore(DogFactory):

    def __init__(self, pet_factory=None):
        self._pet_factory=pet_factory


    def show_pet(self):


        pet_food=self._pet_factory.get_food()

        print("its food is {}".format(pet_food))

在我的python控制台中,我写道:

>>pet=PetStore()
>>pet.show_pet()

然后错误是:AttributeError:' NoneType'对象没有属性' get_food' 还有其他实例化方法吗? 提前谢谢!

1 个答案:

答案 0 :(得分:1)

问题在于PetStore.show_pet()正在尝试拨打self._pet_factory.get_food(),但self._pet_factory默认为None

基本上,您的PetStoreis-a没有DogFactory的关系,所以您只是通过继承它来混淆问题。

您可能想要的是DogFactory离开class PetStore

class PetStore(object):

然后在实例化时指定工厂:

    def __init__(self, pet_factory):  # notice no default here
        self._pet_factory = pet_factory

pet = PetStore(DogFactory())
pet.show_pet()
# It's food is Dog Food!