我几个月前才刚刚开始学习Python,我试图了解不同__get*__
方法之间的区别:
__get__
__getattr__
__getattribute__
__getitem___
及其__del*__
等效项:
__del__
__delattr__
__delete__
__delitem__
这些之间有什么区别?我什么时候应该使用另一个?大多数__get*__
方法都具有__set*__
等效功能,但是没有特定的原因__setattribute__
吗?
您可以从文档索引轻松找到列出的每种方法的文档。
无论如何,这可能是一个扩展的参考:
__get__
,__set__
并且__del__
是描述符简而言之,描述符是一种自定义当您引用模型上的属性时发生的情况的方法。”
[官方文档链接]
对其进行了很好的解释,因此这里有一些参考:
__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
我希望这足以给您一个总体思路。
问题内容: 列表方法append()和之间有什么区别extend()? 问题答案: 5111 在末尾追加对象。 给你: 通过添加来自的元素来扩展列表。 给你:
问题内容: 有人可以在OOP上下文中提供方法与功能的简单说明吗? 问题答案: 甲函数是一段代码由名字叫做。可以传递数据以对其进行操作(即参数),还可以选择返回数据(返回值)。传递给函数的所有数据都被显式传递。 甲方法是一段代码,由与对象相关联的名称叫。在大多数方面,它与功能相同,但有两个主要区别: 方法被隐式传递给调用该方法的对象。 方法能够对类中包含的数据进行操作(记住,对象是类的实例-类是定义
问题内容: 类方法和实例方法有什么区别? 实例方法是访问器(getter和setter)而类方法是其他所有东西吗? 问题答案: 就像大多数其他答案所说的那样,实例方法使用类的实例,而类方法只能与类名一起使用。因此在Objective-C中对它们进行了定义: 然后可以像这样使用它们: 一些真实世界的类方法的例子是很多基础类,如方便的方法的或的。实例方法将是的方法。
本文向大家介绍jQuery的attr和prop方法有什么区别?相关面试题,主要包含被问及jQuery的attr和prop方法有什么区别?时的应答技巧和注意事项,需要的朋友参考一下
问题内容: 该java.io.Writer的接口有两个方法称为追加和写入。两者之间有什么区别?它甚至说 这种形式的方法的调用的行为与调用的行为完全相同 那么拥有两个方法名称变体的原因是什么? 问题答案: append()和write()之间有细微的差别。您可以通过阅读Javadocs来解决所有这些问题。暗示。;) write将只接受一个不能为null的String并返回 append将采用任何可以