请假一下私有的问题
Topic sourceclass Student(Person):
def __init__(self,name,score):
super(Student,self).__init__(name,score)
def get_grade(self):
if self.get_score() >= 90:
return 'A'
elif self.get_score() >= 60:
return 'B'
else:
return 'C'
这样解决的
其他面向对象的语言中有Protect修饰符,是可以在本类或子类中访问到,也就是类似你的self.score这样去获取...但是,在python中,博主已经说明双下划线表示的是private,所以即使是子类也无法访问,即不能用self.score来访问...需要用get,set属性读写器来访问,即用你那个get_score()方法来读,设置的话也是用set_score()来写
子类继承父类,需要调用父类构造方法,当然无参构造无需显式调用
super(Person,self).__init(name,score)
# 或
Person.__init__(name,score)
定义成__score 是外部不能轻易访问,内部还是可以改变它的值的
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 change_score(self):
self.__score = self.__score+10
print(self.__score)
#如果有外部想获取name和score就可以通过这种方法获取
def get_name(self):
return self.__name
def get_score(self):
return self.__score
#如果有允许外部代码修改score,可以通过给Student类增加方法来实现
def set_score(self, score):
if 0<=score<=100:
self.__score = score
else:
raise ValueError('Bad score')
bar = Student("Bart Simpson", 98)入代码
bar.change_score()得到的就是108啊
在此插入代码
class Student(Person): def get_grade(self): if self.get_score() >= 90: return 'A' elif self.get_score() >= 60: return 'B' else: return 'C'
get_grade()方法改成这样就可以了,用父类中定义的get_score方法获取分数然后才能传进去
- 1
木杉_jy
父类中 变量私有了,子类该如何调用啊? bart.get_grade() 报错 “'Student' object has no attribute 'score'”