检查self .__ class__的目的是什么?-蟒蛇

检查self .__ class__的目的是什么?-蟒蛇,第1张

检查self .__ class__的目的是什么?-蟒蛇

self.__class__
是对当前实例 类型 的引用。

对于的实例

abstract1
abstract1
该类 本身 就是类,而对于抽象类,这是您不想要的。抽象类仅应被子类化,而不是直接创建实例:

>>> abstract1()Traceback (most recent call last):  File "<stdin>", line 1, in <module>  File "<stdin>", line 4, in __init__NotImplementedError: Interfaces can't be instantiated

对于一个实例 子类

abstract1
self.__class__
是将特定的子类的引用:

>>> class Foo(abstract1): pass... >>> f = Foo()>>> f.__class__<class '__main__.Foo'>>>> f.__class__ is FooTrue

在这里抛出异常就像

assert
在代码的其他地方使用语句一样,它可以防止您犯傻的错误。

请注意,测试实例类型的 pythonic
方法是改用

type()
函数,以及对运算符的
身份 测试
is


class abstract1(object):    def __init__(self):        if type(self) is abstract1:  raise NotImplementedError("Interfaces can't be instantiated")

type()
应该优先考虑,
self.__class__
因为后者可能被class属性遮盖。

对于自定义类,在这里使用相等性测试没有什么意义,

__eq__
无论如何,基本上将其实现为身份测试。

Python还包括一个用于定义抽象基类的标准库,称为

abc
。它使您可以将方法和属性标记为抽象,并拒绝创建尚未重新定义这些名称的任何子类的实例。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5674528.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存