Python中等同于Ruby的define_method是什么?
有没有Python中类似于Ruby的define_method
的东西,可以用来动态生成类的方法?(可以在维基百科的Ruby示例代码中看到)
3 个回答
0
你只需要把一个函数当作新的属性加到一个类里:
def replacement_method(self):
print self.name
class Foo(object):
def __init__(self, name):
self.name = name
# .... whatever
setattr(Foo, "printMyName", replacement_method) # assign it
Foo("Joe").printMyName() # call it
如果你不需要像维基百科示例中的字符串那样可计算的名字,你可以让它看起来更简洁:
Foo.printMyName = replacement_method
2
在Python中,你可以直接在一个类上设置一个方法:
>>> class Spam:
... def __init__(self, x):
... self.value = x
...
>>> Spam.getvalue = lambda self: self.value
>>> ham = Spam('ham')
>>> ham.getvalue()
'ham'
如果想要更复杂的功能,可以使用装饰器。
14
在Python中,函数被视为一等公民,这意味着你可以把它们当作普通的对象来使用。你可以把函数赋值给一个类或实例的属性。就像维基百科的例子那样,你可以用下面的方式来实现:
colours = {"black": "000",
"red": "f00",
"green": "0f0",
"yellow": "ff0",
"blue": "00f",
"magenta": "f0f",
"cyan": "0ff",
"white": "fff"}
class MyString(str):
pass
for name, code in colours.iteritems():
def _in_colour(self, code=code):
return '<span style="color: %s">%s</span>' % (code, self)
setattr(MyString, "in_" + name, _in_colour)