在Python

时间:2017-03-20 13:25:00

标签: python class initialization self

我希望在一个类中创建函数,这些函数在运行时会更改类的自我值。我也希望在初始化类时能够运行这些函数,希望通过将它们作为参数传递。

作为一个具体的例子,让我们说我有一个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'

2 个答案:

答案 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