【发布时间】:2022-01-09 17:01:26
【问题描述】:
class Meta(type):
def __new__(cls, class_name, bases, attrs):
a={}
for name, val in attrs.items():
if name.startswith("__"):
a[name] = val
else:
a[name.upper()] = val
return(class_name, bases, a)
class D(metaclass=Meta):
x = 5
y = 8
def hello (self):
print("hi")
c = D()
c.hello
为什么会出现这个错误:
'tuple' 对象不可调用 第 20 行,在 c = D()
找不到有人可以帮助我的原因吗?
(代码基于https://www.youtube.com/watch?v=NAQEj-c2CI8的视频教学)
【问题讨论】:
-
因为你的“元类”返回一个元组,而不是一个类。我猜你打算打电话给
type。 -
是的,它返回一个元组,但为什么这不是一个问题youtube.com/watch?v=NAQEj-c2CI8。
-
我不是在看视频,但这对你来说是个问题,因为
__new__需要返回对象实例,在元类的情况下是一个类。类是可调用的,元组不是。 -
整个代码在视频的末尾,这是有效的。您能告诉我如何更改代码以使其正常工作吗?
-
我检查了那个视频的结尾。正如@jonrsharpe 建议的那样,该代码返回
type调用而不是元组。
标签: python class tuples metaclass