Discuss / Python / bart.__name 报错

bart.__name 报错

Topic source

交互环境下:

class Student(object): def init(self,name,score): self.name=name self.score=score def print_score(self): print('%s:%s' %(self.name,self.score)) def get_name(self): return self.name def get_score(self): return self.score

bart=Student('Bart Smipson',96)

bart.__name


AttributeError Traceback (most recent call last)

<ipython-input-17-b54cbc8ec6d2> in <module>() ----> 1 bart.__name

AttributeError: 'Student' object has no attribute '__name'

请问老师和各位道友,这个为什么会报错呢?

我的双下划线在这都不显示了

我觉得最后一行的下划线多余。 根据你写代码的来看 name是一个共有成员 支持xx.name直接访问和修改的 而用xx._name不支持直接访问的

class Student(object): def init(self,name,score): self.name=name self.score=score def print_score(self): print('%s:%d' %(self.name,self.score)) def get_name(self): return self.name def get_score(self): return self.score

bart=Student('Bart Smipson',96) print(bart.name) print(bart.get_name())

忘说了,init初始化的下划线别忘了。 %s代表字符串 score不是字符串 用%d

水滴竹沙

#5 Created at ... [Delete] [Delete and Lock User]

试试bart.get__name(),相当于调用函数

name是一个私有变量,你是不能从外部就这么直接访问的。Python解释器对外把name变量改成了_Studentname,如果你想访问的话,就要用bart._Studentname, 但是廖老师说了,不同版本的解释器会把name改成不一样的变量名,所以bart._Studentname也不是保险用法。你最好在类内部定义一个函数,可以获取变量的值。 如:

在此插入代码

def get_name(self): return self.__name


  • 1

Reply