创建一个staticmethod,默认情况下使用python创建自己的类

创建一个staticmethod,默认情况下使用python创建自己的类,python,object,Python,Object,我知道这可能不是一种好的样式,但我想知道在调用静态方法时是否可以构造一个类 class myClass(): def __init__(self): self.variable = "this worked" @staticmethod def test_class(var=myClass().variable): print self.variable if "__name__" == "__main__": myClass

我知道这可能不是一种好的样式,但我想知道在调用静态方法时是否可以构造一个类

class myClass():
    def __init__(self):
        self.variable = "this worked"

    @staticmethod
    def test_class(var=myClass().variable):
        print self.variable


if "__name__" == "__main__":
    myClass.test_class()
现在它回来了

NameError: name 'myClass' is not defined

这就是我所怀疑的,默认情况下,python解释器将扫描类并注册每个函数,当它注册函数时,它会检查函数的默认变量,必须定义默认变量?

是的,函数参数的默认值必须在函数出现时定义,直到“类块”的末尾,类才真正完成定义。要完成您要做的事情,最简单的方法是:

@staticmethod
def test_class(var=None):
    if var is None: var = myClass().variable
    print var  # I assume this is what you meant to write for this line; otherwise, the function makes no sense.
这有一个缺点,就是您无法将
None
传递给
myClass。请测试class
并将其打印出来。如果要执行此操作,请尝试:

@staticmethod
def test_class(*vars):
     if len(vars) == 0:
         var = myClass().variable
     #elif len(vars) > 1:
         # Throw an error yelling at the user for calling the function wrong (optional)
     else:
         var = vars[0]
     print var

也许最简单的方法是将其转换为
classmethod

class myClass(object):

    def __init__(self):
        self.variable = "this worked"

    @classmethod
    def test_class(cls):
        var = cls().variable
        print var

if __name__ == "__main__":
    myClass.test_class()

您的问题并不完全清楚用例是什么;很可能有更好的方法来做你真正想做的事情