这很烦人:
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++ 中您可以编写 just var
,not this->var
)和自己的类在成员函数中默认使用,您可能会看到有时这很好,而且有时这很烦人。唯一可能的是习惯该功能。
你'变量化'类名。这不会删除,但会缩短名称。
class MyClass:
@staticmethod
def foo():
print "hi"
@staticmethod
def bar():
c.foo()
c = MyClass
您可以通过创建模块级函数foo
然后将其添加到类命名空间来做一些hacky 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()