__len__(self)
在Python中实现方法非常容易,这样它就可以处理这样的len(inst)
调用:
class A(object):
def __len__(self):
return 7
a = A()
len(a) # gives us 7
而且有很多相似的方法,你可以定义(__eq__
,__str__
,__repr__
等)。我知道Python类也是对象。
我的问题:例如,我可以以某种方式进行定义以__len__
使以下工作有效:
len(A) # makes sense and gives some predictable result
你正在寻找被称为“元类”
......就像a
是类的一个实例A
,A
是为好,被称为元类类的一个实例。默认情况下,Python类是type
该类的实例(唯一的例外是Python
2,它具有一些旧式的“旧样式”类,这些类不是从继承的object
)。您可以通过执行以下操作来检查type(A)
…
…它应该返回type
自身(是的,该对象已经过载了一点)。
元类功能强大且绞尽脑汁,值得得到比我要写的快速解释更多的信息……
对于您的特定问题,对于Python 3,以下代码创建一个元类,该元类使用别名len(A)
来调用A上的类方法:
class LengthMetaclass(type):
def __len__(self):
return self.clslength()
class A(object, metaclass=LengthMetaclass):
@classmethod
def clslength(cls):
return 7
print(len(A))
(注意:上面的示例是针对Python 3的。对于Python 2,语法略有不同:您将使用class A(object):\n __metaclass__=LengthMetaclass
它而不是将其作为参数传递。)
究其原因LengthMetaclass.__len__
,不影响 情况
的A
是在Python首先检查属性分辨率的情况下字典,然后走的类层次结构[A, object]
,但它从来没有咨询的元类。而访问A.__len__
首先要查询实例A
,然后遍历 它的
类层次结构,该层次结构由组成[LengthMetaclass, type]
。
问题内容: 首先,我阅读了埃里克森对“为什么不能在Java接口中定义静态方法?”的有用答复。。这个问题不是关于“为什么”的问题,而是关于“然后如何做”的问题。 编辑:我的原始示例不适当地,但我将其保留在下面。 虽然我现在确信在大多数情况下我想做的是过度矫kill过正,但在一种情况下可能需要这样做: 我再举一个例子。现在,让我们采用一个适合于查找表的复杂功能,例如Bessel函数。这必须进行初始化,
因为这个方法是在运行时执行的,所以需要对它进行测试吗
构建基于链表的队列实现。由于以下两个错误,无法运行应用程序: 错误#1:错误:队列。ListIterator不是抽象的,并且不会覆盖迭代器中的抽象方法next(),其中Integer是一个类型变量:Integer扩展类队列中声明的对象。列表迭代器 错误#2:错误:队列中的next()。ListIterator无法在迭代器中实现next(),返回类型int与Integer不兼容,其中E、Intege
有没有办法只在满足条件时才在Javafx中“渲染”组件?我有兴趣做一个具有不同角色的用户界面,如果角色允许,只需添加一个组件,我也想继续使用FXML。我没有读过类似的东西。
问题内容: 这确实是一个好奇心,而不是一个问题。 为什么类没有方法?现在看来似乎应该当你认为它有一个事实,,等方法。 我知道您可以执行以下操作: 但是为什么没有方法呢? 问题答案: 原因是Scanner类旨在读取以空格分隔的令牌。这是包装基础输入流的便捷类。在扫描仪之前,您所能做的只是读取单个字节,如果要读取单词或行,这将是一个很大的麻烦。使用Scanner,您可以传入System.in,它会执行
我有一个由多个类实现的接口,这些类也有一些额外的方法。如果我自动连接这个类。有没有办法自动安装这些额外的方法? 例如─ 界面 服务1 服务2 如果我尝试像这样直接自动连接服务- 然后我得到了类似这样的错误-