我有一个类(node
),我想根据类(operatingMode
)的一个参数为它分配一组特定的函数(在本例中是a1
、a2
、b1
和b2
)。你知道吗
情况是,我有一个电机,有许多不同的工作模式。每个操作模式允许执行某些功能,但不允许执行其他功能。将函数分配给各种模式的方式并不适合为每种操作模式创建类。你知道吗
下面是我的通行证在一个解决方案,但它不工作。你知道吗
有什么想法吗?你知道吗
def a1(self):
return 'a1'
def a2(self):
return 'a2'
def b1(self):
return 'b1'
def b2(self):
return b2
class node(object):
def __init__(self,operatingMode):
self.operatingMode=operatingMode
if self.operatingMode=='A':
self.a1function=a1
self.a2function=a2
print 'Operating Mode \'A\' functions loaded'
if self.operatingMode=='B':
self.b1function=b1
self.b2function=b2
print 'Operating Mode \'B\' functions loaded'
def setOperatingMode(self,operatingMode):
self.operatingMode=operatingMode
self.__init__(self,operatingMode)
在我的终端上运行这个可以调用它,但是我必须声明两次:
In [65]: elbow=node('A')
Operating Mode 'A' functions loaded
In [66]: elbow.a1function(elbow)
Out[66]: 'a1'
尝试运行elbow.setOperatingMode('B')
会产生错误。你知道吗
也许使用
checkMode
装饰器会是一种更干净的方法--这避免了__getattr__
和type.MethodType
魔法:通过上面的代码,我们可以做到:
说明:
decorator语法的工作方式如下:
相当于
在上面,
checkMode
是一个返回装饰器deco
的函数。deco
然后装饰方法a1
、a2
等,以便因此,
a1
是传递给deco
的func。deco(a1)
依次返回一个新方法,一般称为wrapper
。这个新方法通过语句a1 = deco(a1)
分配给a1
。所以a1
现在是方法wrapper
。因此,当您调用elbow.a1()
时,wrapper
中的代码将被执行。你知道吗使用
types.MethodType
和__getattr__
:那么
收益率
相关问题 更多 >
编程相关推荐