如何将类方法分配给类属性?
这个问题在这里已经有了答案:
请注意,当您尝试:
class A:
MAP = {
'add' : A.add(x, y),
'subtract' : A.subtract(x, y),
}
在名称A
存在之前(该类未与名称绑定直到定义完成)以及在名称add
存在之前(您尚未定义该方法),您正尝试访问例如A.add
。 类定义顶层的所有内容都按顺序完成。
在类定义之后 ,您需要将类方法放入字典中(直到定义完成后才能调用它们):
class A:
MAP = {}
@classmethod
def add(cls, x, y): # note colon
return x + y
@classmethod
def subtract(cls, x, y): # also here
return x - y
A.MAP['add'] = A.add
A.MAP['subtract'] = A.subtract
请注意,因为两个类方法都不使用cls
,所以您可以改为使用@staticmethod
。 或者只是使用函数 - Python不是Java,你不需要把所有东西都放到一个类中。
或者,您可以使用getattr
按名称访问属性(包括类方法):
>>> class A:
@classmethod
def add(cls, x, y):
return x + y
@classmethod
def subtract(cls, x, y):
return x - y
>>> getattr(A, 'add')(1, 2)
3
请不要使用python编程,而应使用更标准的oop方法,例如:
#!/usr/bin/env python
class A:
def __init__(self):
pass
@classmethod
def add(self, x, y):
return x + y
@classmethod
def subtract(self, x, y):
return x - y
if __name__ == "__main__":
a = A()
print a.add(1,2) # ans: 3
print a.subtract(2,1) # ans: 1
链接地址: http://www.djcxy.com/p/55173.html