从静态变量访问静态方法

阿什巴

有从静态方法(比如如何访问静态变量很多回答这一个,和那一个,而关于这个主题的伟大的信息在这里),但我在与其他方向的麻烦:如何使用静态方法初始化静态变量。例如:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章