Python的“ __get * __”和“ _del * __”方法有什么区别?
我几个月前才刚刚开始学习Python,我试图了解不同__get*__
方法之间的区别:
__get__
__getattr__
__getattribute__
__getitem___
及其__del*__
等效项:
__del__
__delattr__
__delete__
__delitem__
这些之间有什么区别?我什么时候应该使用另一个?大多数__get*__
方法都具有__set*__
等效功能,但是没有特定的原因__setattribute__
吗?
-
无论如何,这可能是一个扩展的参考:
__get__
,__set__
并且__del__
是描述符简而言之,描述符是一种自定义当您引用模型上的属性时发生的情况的方法。”
[官方文档链接]对其进行了很好的解释,因此这里有一些参考:
- Marty Alchin第1部分和第2部分编写的Python描述符
- 所以问题理解__get__和__set__和Python描述符
- 谷歌
__getattr__
,__getattribute__
,__setattr__
,__delattr__
是 可以定义以自定义
x.name
类实例的属性访问(使用,分配或删除)的含义的 方法 。
[官方文档链接]范例1:
class Foo: def __init__(self): self.x = 10 def __getattr__(self, name): return name f = Foo() f.x # -> 10 f.bar # -> 'bar'
范例2:
class Foo: def __init__(self): self.x = 10 def __getattr__(self,name): return name def __getattribute__(self, name): if name == 'bar': raise AttributeError return 'getattribute' f = Foo() f.x # -> 'getattribute' f.baz # -> 'getattribute' f.bar # -> 'bar'
__getitem__
,__setitem__
,__delitem__
是 可以定义以实现容器对象的方法。
[官方文档链接]例:
class MyColors: def __init__(self): self._colors = {'yellow': 1, 'red': 2, 'blue': 3} def __getitem__(self, name): return self._colors.get(name, 100) colors = MyColors() colors['yellow'] # -> 1 colors['brown'] # -> 100
我希望这足以给您一个总体思路。