ash*_*bar 6 python static python-2.7
有关于如何从静态方法访问静态变量(如大量的回答这一个,和那一个,而关于这个主题的伟大的信息在这里),但我在与其他方向的麻烦:如何使用静态方法初始化静态变量.例如:
import os, platform
class A(object):
@staticmethod
def getRoot():
return 'C:\\' if platform.system() == 'Windows' else '/'
pth = os.path.join(A.getRoot(), 'some', 'path')
Run Code Online (Sandbox Code Playgroud)
最后一行给出了一个例外: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')
Run Code Online (Sandbox Code Playgroud)
一个更丑陋的选择是:
import os, platform
class A(object):
@staticmethod
def getRoot():
return 'C:\\' if platform.system() == 'Windows' else '/'
pth = os.path.join(getRoot.__func__(), 'some', 'path')
Run Code Online (Sandbox Code Playgroud)
...但它非常难以理解(并且取决于@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')
Run Code Online (Sandbox Code Playgroud)
...因为你的平台在程序运行时不太可能改变,对吧?:)如果你有更好的理由做这样的事情,也许可以使用上面的方法之一.