您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何根据参数类型重载__init__方法?

如何根据参数类型重载__init__方法?

获取“替代构造函数”的一种更整洁的方法是使用类方法。例如:

>>> class MyData:
...     def __init__(self, data):
...         "Initialize MyData from a sequence"
...         self.data = data
...     
...     @classmethod
...     def fromfilename(cls, filename):
...         "Initialize MyData from a file"
...         data = open(filename).readlines()
...         return cls(data)
...     
...     @classmethod
...     def fromdict(cls, datadict):
...         "Initialize MyData from a dict's items"
...         return cls(datadict.items())
... 
>>> MyData([1, 2, 3]).data
[1, 2, 3]
>>> MyData.fromfilename("/tmp/foobar").data
['foo\n', 'bar\n', 'baz\n']
>>> MyData.fromdict({"spam": "ham"}).data
[('spam', 'ham')]

它之所以整洁,是因为毫无疑问期望使用哪种类型,并且您不必强迫猜测调用者打算如何使用它给您的数据类型。问题isinstance(x, basestring)在于,例如,即使类型不是基本字符串,调用者也无法告诉您,即使类型不是基本字符串,也应将其视为字符串(而不是其他序列)。也许调用者希望为了不同的目的使用相同的类型,有时作为单个项目,有时作为一系列项目。明确表示将消除所有疑问,并导致更健壮和更清晰的代码

其他 2022/1/1 18:35:53 有199人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶