メタクラスへのメソッドの追加は、以下の例では完全に機能します。メタクラスとメソッド
class Test(object):
def __init__(self, x):
self.x = x
def double(self):
return self.x*2
# method to add
def quadruple(self):
return self.x*4
# creating metaclass
TypeTest = type('TypeTest', (Test,), {'triple': triple,
'quadruple': quadruple})
# prints 8
TypeTest(2).quadruple()
以下の例は機能しません。理由はわかりません。それは単に解析された関数で自己を認識せず、TypeErrorが発生します。
class Vehicle(object):
def __init__(self, wheels, door=False):
self.wheels = wheels
self.door = door
# method to add
def check_load(self, x):
if x > self.load:
return "Load won't fit"
else:
return "Load will fit"
# creating metaclass
Truck = type('Truck', (Vehicle,), dict(wheels=4,door=True, load=100,
check_load=check_load))
# TypeError: check_load() missing 1 required positional argument: 'x'
Truck.check_load(10)
メタクラスを作成していません。 *あなたは正規のクラスを生成するために 'type'メタクラスを使用しています。 –
*実際に*達成しようとしているのは何ですか? – jonrsharpe
"メタクラスへのメソッドの追加は、以下の例では完全に機能します。" 'triple'という名前は何にも束縛されていないので、これは不可能です。そのため、その参照は' NameError'を投げます。 – jpmc26