当前位置: 首页 > 面试题库 >

Python的“ __get * __”和“ _del * __”方法有什么区别?

孟乐
2023-03-14
问题内容

我几个月前才刚刚开始学习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

我希望这足以给您一个总体思路。



 类似资料:
  • 问题内容: 列表方法append()和之间有什么区别extend()? 问题答案: 5111 在末尾追加对象。 给你: 通过添加来自的元素来扩展列表。 给你:

  • 问题内容: 有人可以在OOP上下文中提供方法与功能的简单说明吗? 问题答案: 甲函数是一段代码由名字叫做。可以传递数据以对其进行操作(即参数),还可以选择返回数据(返回值)。传递给函数的所有数据都被显式传递。 甲方法是一段代码,由与对象相关联的名称叫。在大多数方面,它与功能相同,但有两个主要区别: 方法被隐式传递给调用该方法的对象。 方法能够对类中包含的数据进行操作(记住,对象是类的实例-类是定义

  • 问题内容: 类方法和实例方法有什么区别? 实例方法是访问器(getter和setter)而类方法是其他所有东西吗? 问题答案: 就像大多数其他答案所说的那样,实例方法使用类的实例,而类方法只能与类名一起使用。因此在Objective-C中对它们进行了定义: 然后可以像这样使用它们: 一些真实世界的类方法的例子是很多基础类,如方便的方法的或的。实例方法将是的方法。

  • 本文向大家介绍jQuery的attr和prop方法有什么区别?相关面试题,主要包含被问及jQuery的attr和prop方法有什么区别?时的应答技巧和注意事项,需要的朋友参考一下

  • 问题内容: 该java.io.Writer的接口有两个方法称为追加和写入。两者之间有什么区别?它甚至说 这种形式的方法的调用的行为与调用的行为完全相同 那么拥有两个方法名称变体的原因是什么? 问题答案: append()和write()之间有细微的差别。您可以通过阅读Javadocs来解决所有这些问题。暗示。;) write将只接受一个不能为null的String并返回 append将采用任何可以