我使用抽象工厂模式 我有三个类,分开的脚本
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' 还有其他实例化方法吗? 提前谢谢!
答案 0 :(得分:1)
问题在于PetStore.show_pet()
正在尝试拨打self._pet_factory.get_food()
,但self._pet_factory
默认为None
。
基本上,您的PetStore
与is-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!