我希望将一个普通的旧函数作为类常量。但是,Python“有帮助”将它变成了一种方法:
class C(object):
a = 17
b = (lambda x : x+1)
print C.a # Works fine for int attributes
print C.b # Uh-oh... is a <unbound method C.<lambda>> now
print C.b(1) # TypeError: unbound method <lambda>() must be called
# with C instance as first argument (got int instance instead)
答案 0 :(得分:21)
静态方法:
class C(object):
a = 17
@staticmethod
def b(x):
return x+1
或者:
class C(object):
a = 17
b = staticmethod(lambda x : x+1)
答案 1 :(得分:3)
使用staticmethod
:
class C(object):
a = 17
@staticmethod
def b(x):
return x + 1
答案 2 :(得分:3)
在模块中定义函数,但不在类中定义。在你的情况下,它会更好。
普通python方法的第一个参数是self
,self
必须是实例对象。
你应该使用staticmethod:
class C(object):
a = 17
b = staticmethod(lambda x: x+1)
print C.b(1)
# output: 2
或添加self
参数,并创建C:
class C(object):
a = 17
b = lambda self, x: x+1
c = C()
c.b(1)
# output: 2
另一种选择是使用classmethod(只显示你可以这样做):
class C(object):
a = 17
b = classmethod(lambda cls, x: x+1)
C.b(1)
# output: 2