我正在學python,終於到處玩弄工廠。下面的代碼給了我下面的錯誤,我不知道爲什麼。Python代碼不會運行給不必要的TypeError,不知道爲什麼?
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'
是它應該在的位置,並且我在工廠的實例中發了一個參數。這是由於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)
你已經寫了'Check'作爲一個實例方法,但你沒有一個實例。 – user2357112