这很烦人:
class MyClass:
@staticmethod
def foo():
print "hi"
@staticmethod
def bar():
MyClass.foo()
有没有办法让这项工作没有在通话中命名MyClass?即所以我可以在最后一行说foo()
?
答案 0 :(得分:18)
无法使用foo
并获得您想要的内容。没有隐式的类范围,因此foo
是本地的或全局的,都不是你想要的。
您可能会发现classmethod更有用:
class MyClass:
@classmethod
def foo(cls):
print "hi"
@classmethod
def bar(cls):
cls.foo()
这样,至少你不必重复该类的名称。
答案 1 :(得分:1)
不可能。这是语言设计的问题。将其与C ++进行比较,其中this
(与Python self
相同;在Python中,您必须编写self.var
,在C ++中,您可以只编写var
,而不是{{默认情况下,在成员函数中使用1}}}和自己的类,你可能会看到有时这很好,有时候很烦人。唯一可能的是习惯这个功能。
答案 2 :(得分:0)
您可以“可变”类名。这不会删除,但会缩短名称。
class MyClass:
@staticmethod
def foo():
print "hi"
@staticmethod
def bar():
c.foo()
c = MyClass
答案 3 :(得分:-1)
你可以通过创建模块级函数foo
,然后使用staticmethod
将其添加到类命名空间来做一些hacky:
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()