一种方法是为实例化对象的不同方式创建具有不同名称的类方法:
class Text(object):
def __init__(self, data):
# handle data in whatever "basic" form you need
@classmethod
def fromFiles(cls, files):
# process list of filenames into the form that `__init__` needs
return cls(processed_data)
@classmethod
def fromSentences(cls, sentences):
# process list of Sentence objects into the form that `__init__` needs
return cls(processed_data)
这样,您只需创建一个“真实”或“规范”初始化方法,该方法接受您想要的任何“最小公分母”格式。专门的fromXXX
方法可以预处理不同类型的输入,以将它们转换为传递给规范实例化所需的形式。这个想法是你调用从文件名中Text.fromFiles(...)
创建一个,或者从句子对象中创建一个。Text
Text.fromSentences(...)
Text
如果您只想接受几种可枚举的输入之一,也可以进行一些简单的类型检查。例如,类接受文件名(作为字符串)或文件对象并不少见。在这种情况下,你会这样做:
def __init__(self, file):
if isinstance(file, basestring):
# If a string filename was passed in, open the file before proceeding
file = open(file)
# Now you can handle file as a file object
如果您有许多不同类型的输入要处理,这将变得笨拙,但如果它是像这样相对包含的东西(例如,可用于获取该对象的对象或字符串“名称”),它可能比第一个更简单我展示的方法。