Python 缺少1个必需的位置参数:';自我';将方法指定给变量时

Python 缺少1个必需的位置参数:';自我';将方法指定给变量时,python,Python,我试图将一个方法的返回值赋给一个变量,但遇到了这个错误 class MyClass(): def my_def(self): return "Hello" my_variable = my_def() 这是我想做的Java等价物 public class NewException { public int method1(){ return 1; } public int variable = method1();

我试图将一个方法的返回值赋给一个变量,但遇到了这个错误

class MyClass():

    def my_def(self):
        return "Hello"

    my_variable = my_def()
这是我想做的Java等价物

public class NewException {
    public int method1(){

        return 1;
    }
    public int variable = method1();
}

我相信这很简单,但我甚至找不到合适的词来谷歌这个。非常感谢您的帮助。

让我们从方法和函数之间的区别开始,基本上方法属于某个对象,而函数不属于。比如说

def myFunction():
    return "F"

class MyClass:
    value = 0
    def myMethod(self, value):
        old = self.value
        self.value = value
        return old

myClassInstance = MyClass()
print myClassInstance.myMethod(3)
# 0
print myClassInstance.myMethod(33)
# 3
print myFunction()
# F
请注意,该方法绑定到实例,在创建实例之前调用该方法没有意义。考虑到这一点,你的错误应该更有意义。如果没有实例(self),则无法调用该方法。这不是唯一一种方法,例如有“静态方法”。静态方法是在类上定义的,但是调用它们时没有实例。例如:

class MyClass:
    @staticmethod
    def myStaticMethod():
        return "static method"
    # Consider using an instance attribute instead of a class attribute
    def __init__(self):
        self.instance_attribute = MyClass.myStaticMethod()
# Or if you need a class attribute it needs to go outside the class block
MyClass.class_attribute = MyClass.myStaticMethod()

最好将整个错误放在问题的主体中。这将在
MyClass
上设置class属性。我很确定这不是你想做的。你能解释一下代码的上下文吗,这样我们就可以给出如何正确操作的建议。另外看看PEP8,camelCase中的方法名称伤了我的眼睛(是的,我是PEP8纳粹)。你的问题需要更多的上下文。您提供的代码块没有意义。如果确实需要这样做,可以将myDef设置为类方法而不是实例方法。此外,正如Paulo所提到的,您应该使用变量my_variable而不是myvariable,使用my_def而不是myDef。您需要在类之外执行此操作,并使用对象实例执行此操作。如果这对你没有任何意义。请学习Python教程:第9章将介绍类和对象。这意味着我不能直接将静态方法返回值赋值给类变量,对吗?不是不能“直接赋值”,而是类对象直到类块结束时才存在。与函数不同,您不能在类块中递归调用类对象,因此需要在类块外部调用MyClass.myStaticMethod。这样做没有坏处,只是有点难看。