【发布时间】:2018-03-02 09:41:18
【问题描述】:
我正在学习 python 3 中的元类编程,但我遇到了一些问题
class UpperAttrMetaClass(type): # to uppercase all attrs
def __new__(mcs, class_name, class_parents, class_attr):
attrs = ((name, value) for name, value in class_attr.items() if not
name.startswith('__'))
uppercase_attrs = dict((name.upper(), value) for name, value in attrs)
return super(UpperAttrMetaClass, mcs).__new__(mcs, class_name,
class_parents, uppercase_attrs)
class Base(metaclass=UpperAttrMetaClass):
bar = 12
def __init__(self, params):
super(Base, self).__init__()
self.params = params
t = Base(1)
print(t.BAR)
print(t.params)
此代码可以大写所有属性。
我想给init传递一个参数,但是当我运行这段代码时,我被提示犯了一个错误
TypeError: object() takes no parameters
我该如何解决这个问题?
【问题讨论】:
-
大写时你把
__init__方法全部去掉了。 -
删除
__init__并没有什么不同,无论哪种方式都会出现错误。 -
为什么不能在这段代码中使用init?