创建一个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()
看
您的问题并不完全清楚用例是什么;很可能有更好的方法来做你真正想做的事情