396得票8回答
了解__get__和__set__以及Python描述符

我正在尝试理解Python的描述符以及它们的用途。我理解它们的工作原理,但是我有以下疑问。请考虑以下代码:class Celsius(object): def __init__(self, value=0.0): self.value = float(value) ...

30得票2回答
如何使用带有一个参数的super()函数?

在阅读有关Python文档的super()时,我偶然发现了以下声明: 如果省略第二个参数,则返回的super对象未绑定。 什么是“未绑定”,以及如何使用只有一个参数的super()?

25得票2回答
为什么 @staticmethod 不能在类之间保留,而 @classmethod 可以?

考虑以下示例脚本:class A(object): @classmethod def one(cls): print("I am class") @staticmethod def two(): print("I am stat...

17得票3回答
为什么人们在__get__中将所有者参数默认设置为None?

我经常看到这种情况:def __get__(self, instance, owner=None): 为什么一些人在使用owner参数时会使用默认值None? 甚至在Python文档中都这样做:descr.__get__(self, obj, type=None) --> value

17得票2回答
当使用Python的描述器协议时,如何获取属性名称?

描述符协议运行良好,但我仍然有一个问题需要解决。 我有一个描述符: class Field(object): def __init__(self, type_, name, value=None, required=False): self.type = type_...

14得票3回答
为什么在类上设置描述符会覆盖描述符?

简单的复现: class VocalDescriptor(object): def __get__(self, obj, objtype): print('__get__, obj={}, objtype={}'.format(obj, objtype)) d...

13得票1回答
Python数据和非数据描述符

根据Python的文档,具有定义了__set__()和__get__()的数据描述符总是会覆盖实例字典中的重新定义。我没有理解这个句子的问题,但有人能否为我澄清为什么需要这样的规则呢?毕竟,如果我想要在实例字典中覆盖属性,我已经需要明确地这样做(inst.__dict__["attr"] = ...

13得票1回答
通过声明方式设置类的__name__属性

为什么不能直接覆盖类名声明,例如使用一个不是有效标识符的类名? 在IT技术中,有些语法规则需要遵守,类名作为标识符的一部分,必须符合标识符的命名规范。因此,不能直接使用非有效标识符作为类名。 >>> class Potato: ... __name__ = 'not...

13得票3回答
使用描述符进行类型提示

在这个pull request中,似乎添加了描述符的类型提示支持。 然而,似乎从未发布过任何最终的“正确”使用示例,也没有将任何文档添加到typing模块或Mypy中。 看起来,正确的用法类似于这样: from typing import TypeVar T = TypeVar('T'...

12得票5回答
如何临时分配成员变量?

我经常发现我需要临时分配一些成员变量,例如:old_x = c.x old_y = c.y # keep c.z unchanged c.x = new_x c.y = new_y do_something(c) c.x = old_x c.y = old_y 但我希望我能够简单地写作。...