为什么Python元类禁止将参数传递给uu init_u_u方法?

为什么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

这个问题与PyTables元类有关。我试图在PyTables中对
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
  • 要创建的类的所有字段的字典
不能在此处传递参数,因为此调用是由python解释器自动完成的。在Python2中,元类被定义为类本身中的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
属性,而在Python3中它是类定义中的参数

元类的
\uuuuuu new\uuuuu
方法在类的
\uuuuu init\uuuuuu
方法之前被调用,因此使用与类相同的参数。例如,您可以在元类而不是构造函数中更改初始化时类的行为

如果要定义元类的参数,例如,可以使用要在要定义的类中定义的某些特定字段。您还可以编写一个类似元类的函数来为您创建一个类,并且可以向该函数添加参数。但我不知道PyTables和您的确切要求或可能性