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

如何根据参数类型重载__init__方法?,第1张

如何根据参数类型重载__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['foon', 'barn', 'bazn']>>> MyData.fromdict({"spam": "ham"}).data[('spam', 'ham')]

它之所以整洁,是因为毫无疑问期望使用哪种类型,并且您不必强迫猜测调用者打算如何使用它给您的数据类型。问题

isinstance(x,basestring)
在于,例如,即使类型不是基本字符串,调用者也无法告诉您,即使类型不是基本字符串,也应将其视为字符串(而不是其他序列)。也许调用者希望为了不同的目的使用相同的类型,有时作为单个项目,有时作为一系列项目。明确表示将消除所有疑问,并导致更健壮和更清晰的代码。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5655319.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存