Я изучаю питон и, наконец, общаюсь с фабриками. Код ниже дает мне следующую ошибку, и я не знаю почему.Код 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 или что-то еще? Я бегу python 3.5
на компьютере Windows 8
.
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