检查的目的是self.__class__
什么?我找到了一些代码,这些代码创建了一个抽象接口类,然后检查它self.__class__
是否本身,例如
class abstract1 (object):
def __init__(self):
if self.__class__ == abstract1:
raise NotImplementedError("Interfaces can't be instantiated")
目的是什么? 是否要检查类是否本身是类型?
该代码来自NLTK的http://nltk.googlecode.com/svn/trunk/doc/api/nltk.probability-
pysrc.html#ProbDistI
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 Foo
True
在这里抛出异常就像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
。它使您可以将方法和属性标记为抽象,并拒绝创建尚未重新定义这些名称的任何子类的实例。
问题内容: Python中self这个词的目的是什么?我知道它是指从该类创建的特定对象,但是我看不到为什么需要将它作为参数显式添加到每个函数中。为了说明这一点,在中,我可以这样做: 我很容易理解。但是在Python中,我需要包括: 问题答案: 让我们看一个简单的向量类: 我们希望有一种计算长度的方法。如果我们想在类中定义它,它将是什么样? 当我们将其定义为全局方法/函数时,它应该是什么样? 因此,
问题内容: 我在python中有一个问题。 文档说这是一个类实例所属的类。因此,我进行了一系列实验: 一切顺利。 然后我输入如下代码: 从上面的代码中,我认为也许等于或,但是以下代码使我感到惊讶: 为什么更改了,但仍然保持在3?而且,当我改变时,变得。世界到底是什么? 问题答案: “从以上代码中,我认为NewCounter1.count等于NewCounter1。class.count” 问题是,
我需要在我的中添加一个新的目录位置,但问题是我使用的是一个全新安装的系统(Linux),其中尚未定义任何。我读过并使用过,我认为我很了解它,但我不知道当没有存在时会发生什么。 我不能附加到不存在的东西上,但我希望当前发现的所有重要库都能正常工作,因此要小心,我在Python中使用了来获取所有标准值。然后我为定义了一个-变量,包括我刚刚找到的所有节点,以及我的新目录。但是哇,很多东西都停止工作了!P
问题内容: 我正在学习Python编程语言,遇到了一些我不太了解的东西。 用类似的方法: 怎么self办?这是什么意思?它是强制性的吗? 该方法有什么作用?为什么有必要?(等等。) 我认为它们可能是OOP构造,但我不太了解。 问题答案: 你是对的,这些是oop结构。 是一个类的构造函数。该self参数引用对象的实例(如thisC ++)。 分配对象的内存时将调用该方法: self如果要将值与对象持
问题内容: 我从未见过这样的代码: 一样吗? 编辑 如果该类是继承的,它指向哪个类? 问题答案: 指向其编写所在的类。 因此,如果您的getInstance方法位于类名中,则以下行: 将做与: 编辑:评论后,还有更多信息。 如果您有两个相互扩展的类,则有两种情况: 在子类中定义 在父类中定义 第一种情况看起来像这样(在此示例中,我已经删除了所有不必要的代码-您必须将其重新添加来获得单例行为)*:
本文向大家介绍什么是拼写检查?相关面试题,主要包含被问及什么是拼写检查?时的应答技巧和注意事项,需要的朋友参考一下 浏览器中输入区欧盟,输入错误,会被拼写检查为去欧盟,实际上原理是采用了贝叶斯原理,由贝叶斯公式可知P(c|w),w表示拼写错误的情况,而c表示实际想要拼写的单词,等于P(w|c)P(c)/P(w),也就是在若干备选中选择最大的P(c|w),而P(w)都是相同的,即找到使得P(w|c)
我几天前听说了Docker的事,想过去看看。 但事实上,我不知道这个“容器”的用途是什么? 什么是容器? 它能取代一个专门用于开发的虚拟机吗? 简单地说,在公司中使用Docker的目的是什么?主要的优势?
问题内容: 如果可能,如何举例说明如何实现JNDI的用法? 问题答案: JNDI是Java命名和目录接口。它用于分离应用程序 开发人员 和应用程序 部署 人员 的关注点。在编写依赖于数据库的应用程序时,无需担心用于连接该数据库的用户名或密码。JNDI允许开发人员为数据库命名,并依靠部署者将该名称映射到数据库的实际实例。 例如,如果您要编写在Java EE容器中运行的代码,则可以编写此代码来获取JN