66得票2回答
Python子类检查和子类钩子

__subclasscheck__和__subclasshook__方法用于确定一个类是否被视为另一个类的子类。但是,它们的文档非常有限,即使是在高级Python书籍中也是如此。它们应该如何使用,它们的区别是什么(更高的优先级、它们所指的关系的方向等)?

7得票2回答
删除现有的类变量会导致AttributeError错误。

我正在通过Python的元类操作类的创建。然而,尽管一个类由其父类具有属性,但我无法删除它。 class Meta(type): def __init__(cls, name, bases, dct): super().__init__(name, bases, dc...

25得票1回答
虚拟子类的用途是什么?

class AnimalMeta(type): def __instancecheck__(cls, instance): return cls.__subclasscheck__(type(instance)) def __subclasscheck__(c...

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

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

15得票1回答
需要了解__init__、__new__和__call__的执行顺序。

class Singleton(type): def __init__(self, *args, **kwargs): print 'calling __init__ of Singleton class', self print 'args: ', a...

1655得票40回答
在Python中创建单例模式

这个问题并不讨论单例设计模式是否可取,是否是反模式或任何宗教战争,而是讨论如何以最符合Python风格的方式实现此模式。在这种情况下,我将“最符合Python风格”定义为遵循“最小惊奇原则”。 我有多个类需要成为单例(我的用例是一个记录器,但这不重要)。我不希望在几个类中添加额外的内容,而是...

7得票2回答
__instancecheck__ - 覆盖无效果 - 我做错了什么?

我想让我的类看起来像是一个不同的对象,以规避我正在使用的软件包中的懒惰类型检查。更具体地说,在实际情况下,我正在尝试使我的对象看起来像另一个对象的实例(在我的例子中是元组),而实际上它甚至不是这个对象的派生。 为了达到这个目的,我计划重写__isinstance__方法,根据文档, 这样做应...

24得票3回答
如何在Python中创建自己的“参数化”类型(例如`Optional[T]`)?

我想在Python中创建自己的参数化类型,以便在类型提示中使用: class MaybeWrapped: # magic goes here T = TypeVar('T') assert MaybeWrapped[T] == Union[T, Tuple[T]] 忽略那个刻...

22得票5回答
类定义后是否有设置元类的方法?

为了设置类的元类,我们使用 __metaclass__ 属性。元类在类定义时使用,因此在类定义之后显式设置它将无效。 以下是当我尝试显式设置元类时发生的情况;>>> class MetaClass(type): def __new__(cls, name, base...

73得票6回答
使用元类的 __call__ 方法而不是 __new__ 方法?

讨论元类时,文档中说明: 你当然也可以覆盖其他类方法(或添加新的方法);例如在元类中定义自定义的 __call__() 方法允许在调用类时进行自定义行为,例如不总是创建一个新实例。 [编辑注:这段内容已在3.3中从文档中删除。在3.2中可以找到此处:自定义类创建] 我的问题是:假设我想在调...