python面向對象
- 2022 年 1 月 16 日
- 筆記
- python編程學習
1、萬物皆對象
2、對象:用來描述客觀事物的一個實體,由一組屬性和方法構成
3、屬性:對象具有的各種特徵,每個對象的每個屬性都有特定值
4、方法:對象執行的操作
5、類:對象的分類,分類就是認識對象的過程
1、圖書類: 屬性:圖書編號、書名、書的作者、上架日期、借出狀態 功能(方法):借出和歸還 |
2、銀行卡類: 屬性:卡號、銀行卡名稱、密碼、姓名、餘額
|
# 思路: # 定義類 --> 人類 # 編寫類的屬性:姓名、年齡、id(身份證號)、手機號 # 編寫類的方法:吃、喝、玩、睡、上班 class Person: # 編寫屬性(變數) name = "楊冪" age = 30 gender = '女' # 我不想用指定屬性,我想自己創建姓名 def set_param(self, name): # age、gender一樣操作 self.name = name print(f'姓名:{self.name}') # 如屬性很多,那就很麻煩,我們可以使用 def __init__()去構造 # 編寫方法(函數),無參 def eat(self): print('eating') def drink(self): print('drinking') def play(self): print('playing') def sleep(self): print('sleeping') @classmethod def work(self): print('working') # 對象的構造 YM = Person() # 調用方法 YM.sleep() YM.work() zs = Person() zs.set_param('張三') # 類訪問方法,需要添加一個裝飾器@classmethod Person.eat()
# def __init__() 去構造屬性 class Person: def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender # 編寫方法(函數),有參 def eat(self, food): print(f'{self.name}在吃{food}') def drink(self, sthing): print(f'{self.name}在喝{sthing}') def play(self): print(f'{self.name}在玩') def sleep(self): print(f'{self.name}在睡覺') def work(self): print(f'{self.name}正在工作') def info(self): # 輸出資訊 print("該人的資訊:", self.name, self.age, self.gender) # 構造對象輸出資訊 lihaoran = Person(name='李浩然', age=32, gender='男') # 調用方法 lihaoran.info() lihaoran.work() lihaoran.sleep()
- 私有屬性可以被查看,但是不能被修改 —> get方法
- 私有屬性不被外界查看,但可以被外界修改 —> set方法】
"""封裝(屬性私有化)""" class Student: def __init__(self, name, age, xh, id, address): self.name = name # 默認公共屬性(允許外界讀取+修改) self.age = age # 默認公共屬性(允許外界讀取+修改) self.xh = xh self.__id = id # 私有屬性(不允許外界讀取+修改) self.__address = address # 私有屬性(不允許外界讀取+修改) # 私有屬性可以被查看,但是不能被修改 ---> get方法 def getid(self): return self.__id def setaddress(self, newadress): self.__address = newadress def info(self): print('學生的基本資訊:', self.name, self.age, self.xh, self.__id, self.__address) zhangsan = Student('Tom', 18, '001', '340104555555555555', '南京') # 私有屬性(不允許外界讀取+修改),如果想查看get方法 # print(zhangsan.id) # 沒有getid-->報錯AttributeError: 'Student' object has no attribute 'id' read_student_id = zhangsan.getid() print(f'查看張三id:{read_student_id}') zhangsan.info() zhangsan.setaddress("合肥") zhangsan.info()
- 繼承在父類基礎上構造出新的類,子類可以擁有繼承**父類的屬性和方法
- 多態:指一個對象可以用子類的特點也可以父類的特徵
class Animal: def __init__(self, name, color): self.name = name self.color = color def eat(self, food): print(f'{self.name}在吃{food}') def drink(self, sthing): print(f'{self.name}在喝{sthing}') def play(self): print(f'{self.name}在玩') def sleep(self): print(f'{self.name}在睡覺') # 繼承 class Dog(Animal): def __init__(self, name, color, age): super().__init__(name, color) # super()調用父類對象 self.age = age # 屬性有個性(構造屬性重寫) def kaijia(self): print(f"{self.name}看家") hashiqi = Dog('哈士奇', '黑白', 6) hashiqi.eat('骨頭') # 多態 方法上個性(構造方法重寫) 獨特個性 hashiqi.kaijia() class Cat(Animal): def __init__(self, name, color): super().__init__(name, color) # super()調用父類對象 cat = Cat('波斯貓', 'red') cat.eat('魚') # cat.kaijia() 因為貓不會看家,這是狗的獨特個性