在此示例中,用户必须处理两种文件类型(.txt和.csv)。但是,使用者不想打扰检查文件类型,因此实例化专用类。相反,用户使用__new__
创建了一个FileTypeFactory实例,并且将实例化并返回相应的类型。但是,我没有看到如何在AttributeError
class TXT:
def is_valid(self):
return False
class CSV:
def is_valid(self):
return True
class FileTypeFactory:
def __new__(cls):
for FileType in [TXT, CSV]:
file_type = FileType()
if file_type.is_valid():
return file_type
def factory_method(self):
print('Running factory_method')
c = Factory()
c.__class__.__name__
# Returns: 'CSV'
c.factory_method()
# Returns: AttributeError: 'CSV' object has no attribute 'factory_method'