Python代码不会运行给不必要的TypeError,不知道为什么?

2024-10-01 05:02:05 发布

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

我在学python,终于开始玩工厂了。下面的代码给了我以下的错误,我不知道为什么。你知道吗

Traceback (most recent call last):
  File "C:\py_Lab\Factory.py", line 38, in <module>
    print(MyFactory("Ham").x)
  File "C:\py_Lab\Factory.py", line 30, in MyFactory
    if cls.Check(myStr):
TypeError: Check() missing 1 required positional argument: 'myStr'

假设工厂定义在基类的子类中循环,并使用子类中的Check()定义来选择要运行的类。我很确定参数'myStr'就是它应该在的地方,并且我在factory的实例中放置了一个参数。这个错误是由于python的编译方式还是其他原因造成的?我在一台Windows 8电脑上运行python 3.5

class BaseClass(object):
    pass

class AltBaseClass(object):
    pass

class C1(BaseClass, AltBaseClass):
    def __init__(self, *args, **kwargs):
        self.x = 1
    def Check(self, myStr, *args, **kwargs):
        return myStr == "Ham"

class C2(BaseClass, AltBaseClass):
    def __init__(self, *args, **kwargs):
        self.x = 30
    def Check(self, myStr, *args, **kwargs):
        return myStr == "Sandwich"

class C3(BaseClass, AltBaseClass):
    def __init__(self, *args, **kwargs):
        self.x = 70
    def Check(self, myStr, *args, **kwargs):
        return myStr == "Pancake"

def MyFactory(myStr):
    for cls in BaseClass.__subclasses__():
        if cls.Check(myStr):
            return cls()

def OthrFactory(myStr):
    for cls in AltBaseClass.__subclasses__():
        if cls.Check(myStr):
            return cls()

print(MyFactory("Ham").x)
print(OthrFactory("Sandwich").x)
print(OthrFactory("Pancake").x)

Tags: inpyselfreturndefcheckargskwargs
2条回答

cls.Check(myStr)运行Check()时,丢失了一个参数。Check(self, myStr, *args, **kwargs)需要2个参数,selfmyStr。因此,运行Check(myStr)需要第二个参数,根据名称,我假设是self。你知道吗

应该使用@staticmethod修饰符使Check()静态。也许^{}也有用。你知道吗

@staticmethod
def Check(myStr, *args, **kwargs):
    # ...
    pass

这样你就不会有一个self(实例)被myStr解释为。你知道吗

相关问题 更多 >