栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

检查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
。它使您可以将方法和属性标记为抽象,并拒绝创建尚未重新定义这些名称的任何子类的实例。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/669278.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号