为什么Python元类禁止将参数传递给uu init_u_u方法?
这个问题与PyTables元类有关。我试图在PyTables中对为什么Python元类禁止将参数传递给uu init_u_u方法?,python,metaclass,pytables,Python,Metaclass,Pytables,这个问题与PyTables元类有关。我试图在PyTables中对IsDescription元类进行子类化,以通过变量定义列的形状: import tables class MyClass(tables.IsDescription): def __init__(self, param): var1 = tables.Float64Col(shape=(param)) MyClass1 = MyClass(12) 这会引发错误:TypeError:object.\uuuu
IsDescription
元类进行子类化,以通过变量定义列的形状:
import tables
class MyClass(tables.IsDescription):
def __init__(self, param):
var1 = tables.Float64Col(shape=(param))
MyClass1 = MyClass(12)
这会引发错误:TypeError:object.\uuuu new\uuuu()
不接受任何参数。使用self.var1=…
会产生相同的错误
在相同的错误报告中,原因是IsDescription
是一个元类
我的问题是:为什么元类禁止这个功能?它是针对这个元类的,还是针对所有元类的?这是针对所有元类的。 事实上,元类是在创建类时实例化的,传递的参数总是相同的,由python决定。 这些是:
- 要创建的类的名称
- 此类的继承类列表。它是类引用的元组。默认情况下,对于新样式类,它是
object
- 要创建的类的所有字段的字典
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
属性,而在Python3中它是类定义中的参数
元类的\uuuuuu new\uuuuu
方法在类的\uuuuu init\uuuuuu
方法之前被调用,因此使用与类相同的参数。例如,您可以在元类而不是构造函数中更改初始化时类的行为
如果要定义元类的参数,例如,可以使用要在要定义的类中定义的某些特定字段。您还可以编写一个类似元类的函数来为您创建一个类,并且可以向该函数添加参数。但我不知道PyTables和您的确切要求或可能性