我将学习抽象工厂模式并编写一些测试代码。在
有一个狗工厂和猫工厂,我想用宠物工厂来归还宠物。在
但有一个错误 TypeError:必须以DogFactory实例作为第一个参数调用未绑定方法get_pet()(改为什么都没有) 脚本是:
import random
class PetShop(object):
"""A Pet Shop"""
def __init__(self, animal_factory=None):
self.pet_factory = animal_factory
def get_pet(self):
return self.pet_factory.get_pet()
def get_food(self):
return self.pet_factory.get_food()
class Dog(object):
def speak(self):
return "woof"
def __str__(self):
return "Dog"
class Cat(object):
def speak(self):
return "meow"
def __str__(self):
return "Cat"
class DogFactory(object):
"""Create a Dog"""
def get_pet(self):
return Dog()
def get_food(self):
return "dog food"
class CatFactory(object):
"""Create a Cat"""
def get_pet(self):
return Cat()
def get_food(self):
return "Cat food"
def main():
factory = random.choice([DogFactory, CatFactory])
petshop = PetShop(factory)
print petshop.get_pet()
if __name__ == "__main__":
main()
我搜索了一些类似的问题,但不知道,如果你能解释给我,那就太好了。在
谢谢大家。在
您忘记实例化工厂:
这会导致
self.pet_factory.get_pet()
在PetShop
中调用工厂类上的get_pet()
失败。在这失败了,因为
^{pr2}$get_pet
是一个方法,您应该调用一个实例的“from”:或者,您可以在工厂类上生成
get_pet
aclassmethod
。在相关问题 更多 >
编程相关推荐