This is annoying:
class MyClass:
@staticmethod
def foo():
print \"hi\"
@staticmethod
def bar():
MyClass.foo()
You 'variable-ize' the class name. This will not remove, but shorten the name.
class MyClass:
@staticmethod
def foo():
print "hi"
@staticmethod
def bar():
c.foo()
c = MyClass
You can do something hacky by making a module level function foo
and then adding it to the class namespace with 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()
Not possible. It is a question of language design. Compare that to C++, where both this
(the same as Python self
; in Python you have to write self.var
, in C++ you may write just var
, not this->var
) and own class are used by default in member functions, and you will probably see that sometimes that's good and sometimes that's annoying. The only thing possible is to get used to that feature.
There is no way to use foo
and get what you want. There is no implicit class scope, so foo
is either a local or a global, neither of which you want.
You might find classmethods more useful:
class MyClass:
@classmethod
def foo(cls):
print "hi"
@classmethod
def bar(cls):
cls.foo()
This way, at least you don't have to repeat the name of the class.