Python method1()缺少1个必需的位置参数:';自我';

Python method1()缺少1个必需的位置参数:';自我';,python,Python,我是python新手,无法理解我收到的1个错误,即method1()缺少1个必需的位置参数:“self”。 下面是我的python代码供参考 outsidevariable = "This is outside variable" class class1: classvariable = "This is class variable" print("Printing class variable",classvariable) pr

我是python新手,无法理解我收到的1个错误,即method1()缺少1个必需的位置参数:“self”。 下面是我的python代码供参考

outsidevariable = "This is outside variable"
class class1:
classvariable = "This is class variable"
print("Printing class variable",classvariable)
print("Printing outside variable",outsidevariable)

def method1(self):
    method1variable1 = "method1 variable1"
    print("Printing class variable from method1 ",classvariable)
    print("Printing outside variable from method1 ",outsidevariable)
    print("Printing method1variable1 ",method1variable1)

def method2(self):
    method2variable1= "method2 variable1"
    print("Printing class variable from method1 ",classvariable)
    print("Printing outside variable from method1 ",outsidevariable)
    print("Printing method1variable1 ",self.method1variable1)
    print("Printing method1variable1 ",method2variable1)


c = class1
c.method1()
c.method2()
method1()缺少1个必需的位置参数:“self”

发生这种情况是因为您没有使用
c=class1

因为缩进,你认为self是一个参数

outsidevariable = "This is outside variable"
class class1:
    classvariable = "This is class variable"
    print("Printing class variable",classvariable)
    print("Printing outside variable",outsidevariable)

    def method1(self):
        method1variable1 = "method1 variable1"
        print("Printing class variable from method1 ",classvariable)
        print("Printing outside variable from method1 ",outsidevariable)
        print("Printing method1variable1 ",method1variable1)

    def method2(self):
        method2variable1= "method2 variable1"
        print("Printing class variable from method1 ",classvariable)
        print("Printing outside variable from method1 ",outsidevariable)
        print("Printing method1variable1 ",self.method1variable1)
        print("Printing method1variable1 ",method2variable1)


c = class1()
c.method1()
c.method2()

我修复了对象创建错误并修复了缩进,因此函数将self注册为对象而不是参数

语句
c=class1
不创建实例,它只为类提供另一个别名(python的变量实际上起着指针的作用。它们不是实际的对象,而是指向该对象的指针。)

尝试:

此外,我认为(由于您没有指定任何内容,这是一个猜测),您需要将这些变量的每个引用
method2variable1
method1variable1
classvariable1
更改为
self.method2variable1
self.method1variable1
class1.classvariable

这个

比如说,

def method2(self):
    self.method2variable1 = "method2 variable1"
    print("Printing class variable from method1", class1.classvariable)
    print("Printing outside variable from method1",outsidevariable)
    print("Printing method1variable1", self.method1variable1)
    print("Printing method1variable1", self.method2variable1)
编辑:

为了避免歧义,我发布了我的全部代码:

outsidevariable = "This is outside variable"
class class1:
    classvariable = "This is class variable"
    print("Printing class variable",classvariable)
    print("Printing outside variable",outsidevariable)

    def method1(self):
        self.method1variable1 = "method1 variable1"
        print("Printing class variable from method1 ", class1.classvariable)
        print("Printing outside variable from method1 ", outsidevariable)
        print("Printing method1variable1 ", self.method1variable1)

    def method2(self):
        self.method2variable1= "method2 variable1"
        print("Printing class variable from method1 ", class1.classvariable)
        print("Printing outside variable from method1 ", outsidevariable)
        print("Printing method1variable1 ", self.method1variable1)
        print("Printing method1variable1 ", self.method2variable1)


c = class1()
c.method1()
产出:

Printing class variable This is class variable
Printing outside variable This is outside variable
Printing class variable from method1  This is class variable
Printing outside variable from method1  This is outside variable
Printing method1variable1  method1 variable1

也许另一个答案忽略了这一点,但是您不能像那样从method2调用method1变量。您必须使其全局化。此外,在方法中使用self

outsidevariable = "This is outside variable"
class class1:
    classvariable = "This is class variable"
    print("Printing class variable",classvariable)
    print("Printing outside variable",outsidevariable)

    def method1(self):
        global method1variable1  #Global, so can be accessed by other function
        method1variable1 = 'Method1 variable 1'
        print("Printing class variable from method1 ",class1.classvariable)
        print("Printing outside variable from method1 ",outsidevariable)
        print("Printing method1variable1 ",method1variable1)


    def method2(self, method2variable1):
        self.method2variable1 = method2variable1

        print("Printing class variable from method1 ",class1.classvariable)
        print("Printing outside variable from method1 ",outsidevariable)
        print("Printing method1variable1 ", method1variable1) #Here you are calling variable from method1
        print("Printing method1variable1 ",method2variable1)


c = class1()
c.method1()
c.method2('method2 variable1')
输出:-

Printing class variable This is class variable
Printing outside variable This is outside variable
Printing class variable from method1  This is class variable
Printing outside variable from method1  This is outside variable
Printing method1variable1  Method1 variable 1
Printing class variable from method1  This is class variable
Printing outside variable from method1  This is outside variable
Printing method1variable1  Method1 variable 1
Printing method1variable1  method2 variable1

您的缩进已损坏,因此您的方法
method1
method2
不属于您的类
class1
。请正确缩进它们。
c=class1
不会创建实例,它只会为类提供另一个名称。您想要
c=class1()
。除了上面的注释之外,您的代码中还有很多问题。您访问
classvariable
self.method1variable1
谢谢。我的错误已经解决,但现在我在method1变量访问method2时遇到了一个错误。@RaviMishra检查我的答案。@SeaverOlson我对此投了反对票。看看我的答案。
print(“Printing method1variable1”,self.method1variable1)
你的代码中有这样的内容。这行得通吗?@AbhishekRai问题是关于某个错误,而不是整个代码。你帮助他们解决他们遇到的问题,这样他们就可以继续处理下一个错误,并找到解决方法themselves@SeaverOlson你需要更多地了解这一点。答案永远不是关于OP的。答案是针对每个人的。访问Meta知道更多。@AbhishekRai请再次检查我的答案。我已经提到要将变量的每个引用都更改为
self.
或'class.`。因为根据变量的名称,OP似乎希望有实例变量。我的答案也被OP接受。似乎这解决了他的问题。甚至我在我的答案中已经澄清了我在做假设,OP没有回来。看起来这真的解决了他的问题。在你的回答中,你也做了一些假设,并使用这些假设更正了代码。OP说他希望
method1variable1
是全局的?它甚至与变量名不匹配。他也没有提到他希望
method2variable1
成为实例变量。
Printing class variable This is class variable
Printing outside variable This is outside variable
Printing class variable from method1  This is class variable
Printing outside variable from method1  This is outside variable
Printing method1variable1  Method1 variable 1
Printing class variable from method1  This is class variable
Printing outside variable from method1  This is outside variable
Printing method1variable1  Method1 variable 1
Printing method1variable1  method2 variable1