类中的Python错误

2024-05-03 09:46:50 发布

您现在位置:Python中文网/ 问答频道 /正文

class exampleclass:     
    def meth01(self, name):         
        print self.name

obj1 = exampleclass()
obj1.meth01("James")

错误消息:

Traceback (most recent call last):   File "<pyshell#5>", line 1, in
<module>
    obj1.meth01("James")   File "<pyshell#3>", line 3, in meth01
    print self.name AttributeError: exampleclass instance has no attribute 'name'

我做错了什么来产生这个错误,名称在参数中,我试图设置什么名称以便打印?你知道吗


Tags: nameinself名称def错误lineclass
3条回答

变量name是参数列表的一部分,但是在示例类对象本身中没有name成员值。你知道吗

一步一步地思考代码的作用。首先,它实例化一个新的exampleclass对象。你知道吗

然后打电话给obj1.meth01("James")meth01传递值self=obj1和name=“James”

meth01然后尝试查找存储为obj1.name的值,但不存在,因为在本例中,name是方法meth01的本地值,并且不是对象obj01本身的一部分。你知道吗

您需要创建__init__方法

class exampleclass:
    def __init__(self, name):
        self.name = name

您正在打印self.name。这是类的成员变量,而不是函数meth01的输入变量。在函数中,name引用输入,self.name引用类的成员变量。但你没有设定它。你知道吗

请改为:

class ExampleClass:
    def meth01(self, name):
        print( name )

要了解发生了什么,请按以下方式展开:

class ExampleClass:
    def setName(self, name):
        self.name = name
    def meth01(self, name):
        print('Input variable name: ', name)
        print('Member variable name: ', self.name)

 ec = ExampleClass()
 ec.meth01('John') # This line will fail because ec.name hasn't been set yet.
 ec.setName('Jane')
 ec.meth01('John')
 # This will print:
 #('Input variable name: ', 'John')
 #('Member variable name: ', 'Jane')

相关问题 更多 >