我在学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)
在
cls.Check(myStr)
运行Check()
时,丢失了一个参数。Check(self, myStr, *args, **kwargs)
需要2个参数,self
和myStr
。因此,运行Check(myStr)
需要第二个参数,根据名称,我假设是self
。你知道吗应该使用} 也有用。你知道吗
@staticmethod
修饰符使Check()
静态。也许^{这样你就不会有一个
self
(实例)被myStr
解释为。你知道吗相关问题 更多 >
编程相关推荐