gpt4 book ai didi

python - super() 在类方法中不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 02:41:36 27 4
gpt4 key购买 nike

ctypes 有一个类方法 from_buffer .我正在尝试向子类中的 from_buffer() 添加一些自定义处理,但在调用 super() 时遇到问题。这是一个例子:

from ctypes import c_char, Structure


class Works(Structure):
_fields_ = [
("char", c_char),
]


class DoesntWork(Works):
@classmethod
def from_buffer(cls, buf):
print "do some extra stuff"
return super(DoesntWork, cls).from_buffer(buf)


print Works.from_buffer(bytearray('c')).char
print DoesntWork.from_buffer(bytearray('c')).char

这会导致错误:

c
do some extra stuff
Traceback (most recent call last):
File "superctypes.py", line 18, in <module>
print DoesntWork.from_buffer(bytearray('c')).char
File "superctypes.py", line 14, in from_buffer
return super(DoesntWork, cls).from_buffer(buf)
AttributeError: 'super' object has no attribute 'from_buffer'

我错过了什么?为什么 super 在这里不起作用?

最佳答案

from_buffer 实际上不是Structure 上的类方法;它是 Structure 类型(即它的元类)的一个方法。因此,它不能以通常的方式被覆盖:这就像要求为单个对象而不是覆盖普通方法。

调用 type(cls).from_buffer(cls,buf) 有效。这非常糟糕,但我没有立即看到其他选择。

关于python - super() 在类方法中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46333635/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com