-1
向元類添加一個方法在下面的例子中可以很好地工作。元類和方法
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()
下面的例子不起作用,我不知道爲什麼。它只是無法識別解析函數中的self併發生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)
您並未創建元類。你正在使用類型元類來生成一個普通類。 –
你究竟在努力實現什麼? – jonrsharpe
「在下面的例子中,向元類添加一個方法完美。」這是不可能的,因爲名稱'triple'沒有綁定任何東西,所以引用它會拋出一個'NameError'。 – jpmc26