这是烦人:
class MyClass:
@staticmethod
def foo():
print "hi"
@staticmethod
def bar():
MyClass.foo()
有没有一种方法,使这项工作没有在通话命名MyClass的? 即这样我就可以说foo()
的最后一行?
这是烦人:
class MyClass:
@staticmethod
def foo():
print "hi"
@staticmethod
def bar():
MyClass.foo()
有没有一种方法,使这项工作没有在通话命名MyClass的? 即这样我就可以说foo()
的最后一行?
有没有办法使用foo
,并得到你想要的。 没有隐含的类的范围内,所以foo
是一个局部或全局,这两者都不想要。
您可能会发现classmethods更多有用:
class MyClass:
@classmethod
def foo(cls):
print "hi"
@classmethod
def bar(cls):
cls.foo()
这样一来,至少你不必重复类的名称。
不可能。 这是语言设计的问题。 相比之下,C ++,其中两个this
(同为Python的self
;在Python你必须写self.var
,在C ++中您可以写信只是var
,而不是this->var
)和自己的类成员函数的默认情况下使用,你可能会看到,有时这是很好的,有时是很烦人。 可能唯一的一点是习惯该功能。
您可以通过模块级功能做一些哈克foo
,然后将它添加到类的命名空间与staticmethod
:
def foo():
print "hi"
class MyClass(object):
foo = staticmethod(foo)
@classmethod
def bar(cls):
return cls.foo()
def baz(self):
return foo()
c = MyClass()
c.bar()
c.baz()
MyClass.bar()
MyClass.foo()