- 成员可见性,变量和方法的可见性。使用“__”开头的变量和方法为私有变量和方法
-
class Student(): def __init__(self, name, age): # 构造函数 # 初始化变量的属性 self.name = name self.age = age self.__score = 0 # 这里是私有变量 # def __marking(self, score): # 这里使用__是方法变成私有方法 def marking(self, score): # 这里使用__是方法变成私有方法 if 0 <= score <= 100: self.__score = score else: self.__score = 0 print(self.__score) stu = Student("王", 19) # stu.marking(10) # 这里调用出错,因为是私有方法 stu.marking(10) # print(stu.score) # 这里调用出错,因为是私有变量 stu.__score = 19 # 不报错,原因从下面的代码中,多增加了一个变量'__score': 19 print(stu.__dict__) # {'name': '王', 'age': 19, '_Student__score': 10, '__score': 19} print(stu._Student__score) # python 将私有变量变成_Student__score形式,可以访问
- 继承:`class A(B):`,A继承于B,B是A的父类。支持多继承。
-
class B(): sums = 0 def __init__(self, name, age): self.name = name self.age = age def get_name(self): print(self.name) class A(B): def do_homework(self): print("hello!") stu = A("王", 20) print(stu.sums) print(A.sums) print(B.sums) print(stu.name) ------------------------------分割线---------------------------------------- class B(): sums = 0 def __init__(self, name, age): self.name = name self.age = age def get_name(self): print(self.name) class A(B): def __init__(self, school, name, age): self.school = school # B.__init__(self, name, age) # 这里要传入self,否则报错(形参和实参对应) super(A, self).__init__(name, age) # 使用super调用父类的方法,常用 def do_homework(self): print("hello!") stu = A("北大", "王", 20) print(stu.sums) print(A.sums) print(B.sums) print(stu.name) print(stu.school)
- 当子类的方法和父类的方法重名,会调用子类的方法,覆盖父类的方法,可以使用`super(a, self).do_homework()`来调用重名的父类的方法