我知道类可以实现各种特殊方法,例如__iter__
,__setitem__
,__len__
,__setattr__
等等。但什么时候应该使用它们?任何人都可以描述我希望实现它们的典型场景,它们会简化Python中的编程吗?
谢谢,Boda Cydo。
答案 0 :(得分:3)
嗯,简短的回答是:当你需要它们时。
由于有许多内置函数我无法回答所有这些函数。但是,您几乎可以在不重写内置Python函数的情况下进行管理。
通常,当你做需要它们时,你希望你的对象在Python中表现得像内置数据类型。例如,如果您希望能够运行
len(...)
在您的对象上(覆盖_____ len _____(...)),或比较两种数据类型的对象,如下所示:
obj1 < obj2
(覆盖_____ cmp _____(...))来做到这一点。
答案 1 :(得分:3)
我认为你基本上回答了你的问题。
熟悉特殊方法。如果您发现使用一个会使您的程序更简单,请使用它。如果你不明白它是为了什么,或者觉得它是一个更复杂的解决方案 - 你已经回答了这个问题。不要使用它。
典型的情况是:
覆盖运营商
捕获对不存在的属性的访问权并处理该访问权限(__getattr__
)
操纵类和实例创建(__init__
,__slots__
,__new__
)
自定义字符串表示形式(__str__
和__repr__
)
允许适销性(__call__
)
挂钩方便/常用的内置语法(__getitem__
,__len__
等...)
这些内容主要涵盖在https://docs.python.org/reference/datamodel.html#specialnames和http://docs.python.org/reference/datamodel.html#special-method-names
答案 2 :(得分:0)
如果您正在创建一个类似于数组或字典的类,这些非常有用,因此您的语法看起来很熟悉。例如,如果您想创建一个有序字典,您可以使用您提到的所有函数,以便可以将它与常规字典互换。
答案 3 :(得分:0)
getattr
和setattr
非常有用。您将它们映射到该成员的getattr
和setattr
。