有从静态方法(比如如何访问静态变量很多回答这一个,和那一个,而关于这个主题的伟大的信息在这里),但我在与其他方向的麻烦:如何使用静态方法初始化静态变量。例如:
import os, platform
class A(object):
@staticmethod
def getRoot():
return 'C:\\' if platform.system() == 'Windows' else '/'
pth = os.path.join(A.getRoot(), 'some', 'path')
最后一行给出一个例外:NameError: name 'A' is not defined
。如果我使用@classmethod
而不是会发生相同的错误@staticmethod
。
是否可以从类变量访问静态方法?
问题在于,在声明变量路径时,类“ A”尚不存在,因此评估失败。马上声明呢?
import os, platform
class A(object):
@staticmethod
def getRoot():
return 'C:\\' if platform.system() == 'Windows' else '/'
A.pth = os.path.join(A.getRoot(), 'some', 'path')
一个更丑陋的选择是:
import os, platform
class A(object):
@staticmethod
def getRoot():
return 'C:\\' if platform.system() == 'Windows' else '/'
pth = os.path.join(getRoot.__func__(), 'some', 'path')
...但是它是非常不可读的(并且取决于@staticmethod的实现细节,这很糟糕)。
对于这种特定情况,我会做这样的事情(它并不能真正回答您的问题,而是回避了对它的需要):
import os, platform
class A(object):
_root = 'C:\\' if platform.system() == 'Windows' else '/'
@staticmethod
def getRoot():
return A._root
pth = os.path.join(_root, 'some', 'path')
...因为您的程序仍在运行时,您的平台几乎不可能更改,对吗?:)如果您有更好的理由进行此类操作,则可以使用上述方法之一。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句