是否有在静态方法中引用自己的类的简写?
说我有这段代码:
class SuperLongClassName(object):
@staticmethod
def sayHi():
print 'Hi'
@staticmethod
def speak():
SuperLongClassName.sayHi() # Is there a shorthand?
Run Code Online (Sandbox Code Playgroud)
是的,用@classmethod而不是@staticmethod.@staticmethod如果您不需要,可以删除额外的类参数.
class SuperLongClassName(object):
@classmethod
def sayHi(cls):
print 'Hi'
@classmethod
def speak(cls):
cls.sayHi()
Run Code Online (Sandbox Code Playgroud)
你可能想要一个classmethod.它的作用类似于a staticmethod,但是将类作为隐式的第一个参数.
class Claaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass(object):
@classmethod
def foo(cls):
print cls.__name__
Claaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass.foo() # prints Claaa...
Run Code Online (Sandbox Code Playgroud)
警告:
class Subclaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass(
Claaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass):
pass
Subclaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass.foo() # prints Subclaaa...
Run Code Online (Sandbox Code Playgroud)
或者,在模块级别为类定义更短的别名:
class Claaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass2(object):
@staticmethod
def foo():
return _cls2
_cls2 = Claaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass2
# prints True
print (Claaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass2 is
Claaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaass2.foo())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
424 次 |
| 最近记录: |