- 成員可見性,變量和方法的可見性。使用“__”開頭的變量和方法為私有變量和方法
-
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()`來調用重名的父類的方法