我希望在一个类中创建函数,这些函数在运行时会更改类的自我值。我也希望在初始化类时能够运行这些函数,希望通过将它们作为参数传递。
作为一个具体的例子,让我们说我有一个foo
课,自我价值thing
和职能bar
。在初始化foo
时,我希望将bar
作为参数传递,然后运行函数bar
并相应地更改thing
。所以:
class Foo:
def __init__(self, function_to_call):
self.thing = ""
self.function_to_call()
def bar(self):
self.thing = "blah blah blah"
myClassInstance = Foo(bar)
print(myClassInstance.thing)
所以,在这种情况下,我希望后一行返回"等等等等。"这可能吗?如果是这样,怎么样?目前我被告知AttributeError: 'Foo' object has no attribute 'function_to_call'
。
答案 0 :(得分:1)
您可以传入对未绑定类方法的引用:
class Foo:
def __init__(self, function_to_call):
self.thing = ""
function_to_call(self)
def bar(self):
self.thing = "blah blah blah"
myClassInstance = Foo(Foo.bar)
print(myClassInstance.thing)
结果:
blah blah blah
除此之外:我不清楚为什么你会想要这样做,因为在你创建Foo之后调用bar
这条线要简单得多。那么你根本不需要做任何函数传递。
class Foo:
def __init__(self):
self.thing = ""
def bar(self):
self.thing = "blah blah blah"
myClassInstance = Foo()
myClassInstance.bar()
print(myClassInstance.thing)
答案 1 :(得分:0)
另一种方法是将方法名称作为字符串传递。然后,您可以使用getattr
来获取绑定方法。
class Foo:
def __init__(self, funcname):
self.thing = ""
getattr(self, funcname)()
def bar(self):
self.thing = "blah blah blah"
foo = Foo('bar')
print(foo.thing)
<强>输出强>
blah blah blah