我正在使用一个包,它使用以下代码片段定义了一个 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
但这看起来像是一个黑客。有更好的方法吗?
您可以将函数绑定到类:
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