类实例化和绑定函数

问题描述 投票:0回答:1

我正在使用一个包,它使用以下代码片段定义了一个 Test 类。

if self.accept(proposed_next_state):
    self.state = proposed_next_state

并且

__init__
函数通过以下简单的方式设置
self.accept

def __init__(self, accept,initial_state):
        self.accept = accept
        self.state = initial_state

我正在尝试为

func
定义一个可以同时使用
accept
proposed_next_state
的函数
self.state
。问题是,如果我将类的实例定义为

instance=Test(func,initial_state)

func
无法访问
self.state
,因为它未绑定到
Test
。最简单的方法是什么?

我现在的解决方法是通过以下方式扩展课程

def extendedTest(Test):
    def func(self, proposed_next_state):
       #do stuff here

instance=extendedTest(func,initial_state)
instance.accept=instance.func

但这看起来像是一个黑客。有更好的方法吗?

python class methods
1个回答
0
投票

您可以将函数绑定到类:

class Test:
    # Dummy class
    def __init__(self, accept, initial_state):
        self.accept = accept
        self.state = initial_state

    def accept(self, x):
        return True

    def set_state(self, proposed_next_state):
        if self.accept(proposed_next_state):
            self.state = proposed_next_state


def state_setter(self, value=True):
    self.state = value

# bind state_setter to Test class!
Test.state_setter = state_setter

t = Test(False, False)
t.state_setter('foobar')
print(t.state)

出:

foobar
© www.soinside.com 2019 - 2024. All rights reserved.