今天用最直白的话讲清楚Python面向对象三大特征-封装、继承、多态class BankAccount: def __init__(self, balance): self.__balance = balance # __开头表示私有,外面不能直接访问 def deposit(self, money): # 通过公开方法操作 if money > 0: self.__balance += money def get_balance(self): # 只读访问 return self.__balance# 使用account = BankAccount(1000)account.deposit(500)# print(account.__balance) # 报错!不能直接访问print(account.get_balance()) # 1500
所谓封装就是把相关的数据和操作放在一起,上述案例银行账户类封装了账户金额私有数据和存款以及查询存款的操作,私有数据对外不能直接访问,可通过对外暴露的get_balance方法查询
class Animal: # 父类 def eat(self): print("吃东西")class Dog(Animal): # 子类继承Animal def bark(self): print("汪汪叫")class Cat(Animal): # 另一个子类 def meow(self): print("喵喵叫")# 使用dog = Dog()dog.eat() # 继承来的:吃东西 dog.bark() # 自己的:汪汪叫cat = Cat()cat.eat() # 继承来的:吃东西
现实类比:继承-子承父业,孩子继承父母的基因,但又会有自己的特点。
好处:代码复用,避免重复写相同代码。
多态-相同的方法,具体实现不一样,如下面的speak方法就体现这一点class Animal: # 父类 def __init__(self, name): self.__name = name # 封装:私有属性 def speak(self): # 多态:子类会覆盖 pass def get_name(self): # 封装:公开方法 return self.__nameclass Dog(Animal): # 继承 def speak(self): # 多态:自己的实现 print(f"{self.get_name()}说:汪汪")class Cat(Animal): # 继承 def speak(self): # 多态:自己的实现 print(f"{self.get_name()}说:喵喵")# 使用animals = [Dog("旺财"), Cat("咪咪")]for animal in animals: animal.speak() # 同一个调用,不同输出
💬 写代码遇到bug没人问?欢迎加我微信👉【zxl7621485】,备注“读者”