TypeError:必须以DogFactory实例作为第一个参数调用未绑定方法get_pet()(改为什么都没有)

2024-10-01 04:49:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我将学习抽象工厂模式并编写一些测试代码。在

有一个狗工厂和猫工厂,我想用宠物工厂来归还宠物。在

但有一个错误 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()

我搜索了一些类似的问题,但不知道,如果你能解释给我,那就太好了。在

谢谢大家。在


Tags: self宠物getreturnobjectfoodmainfactory
1条回答
网友
1楼 · 发布于 2024-10-01 04:49:39

您忘记实例化工厂:

def main():
    FactoryCls = random.choice([DogFactory, CatFactory])
    petshop = PetShop(FactoryCls())
    print petshop.get_pet()

这会导致self.pet_factory.get_pet()PetShop中调用工厂上的get_pet()失败。在

这失败了,因为get_pet是一个方法,您应该调用一个实例的“from”:

^{pr2}$

或者,您可以在工厂类上生成get_petaclassmethod。在

相关问题 更多 >