Python復習筆記(五)面向對象
阿新 • • 發佈:2019-02-22
created 筆記 init 空間 自己 %d tro ret 初始化
1. __init__方法
# 1. 為對象在內存 中分配空間 -- 創建對象 # 2. 為對象屬性 設置初始值 -- 初始化方法(init) # 3. __init__: 專門用來定義一個類 具有哪些屬性的方法! class Cat: def __init__(self): # self.屬性名 = 屬性的初始值 self.name = "TOM" # print("這是一個初始化方法") def eat(self): print("%s 吃魚" % self.name) # 使用類名()創建對象的時候會自動調用初始化方法__init__tom = Cat() print(tom.name)
TOM 我去了
TOM
2. 利用參數設置屬性初始值
# 1. 為對象在內存 中分配空間 -- 創建對象 # 2. 為對象屬性 設置初始值 -- 初始化方法(init) # 3. __init__: 專門用來定義一個類 具有哪些屬性的方法! class Cat: def __init__(self, new_name): # self.屬性名 = 屬性的初始值 self.name = new_name # print("這是一個初始化方法") defeat(self): print("%s 吃魚" % self.name) # 使用類名()創建對象的時候會自動調用初始化方法__init__ tom = Cat("TOM") print(tom.name) lazy_Cat = Cat("Lazy") lazy_Cat.eat()
3. __del__方法
class Cat:
def __init__(self, new_name):
# self.屬性名 = 屬性的初始值+
self.name = new_name
print("%s 我來了" % self.name)
def eat(self):
print("%s 吃魚" % self.name)
def __del__(self):
print("%s 我去了" % self.name)
# 使用類名()創建對象的時候會自動調用初始化方法__init__
tom = Cat("TOM")
print(tom.name)
print("-"*50)
TOM 我來了
TOM
--------------------------------------------------
TOM 我去了
4. __str__方法
# -*- coding: utf-8 -*- """ Created on Fri Feb 22 16:35:56 2019 @author: Douzi """ class Cat: def __init__(self, new_name): # self.屬性名 = 屬性的初始值+ self.name = new_name print("%s 我來了" % self.name) def eat(self): print("%s 吃魚" % self.name) def __del__(self): print("%s 我去了" % self.name) def __str__(self): # 必須返回一個字符串 return "我是小貓[%s]" % self.name # 使用類名()創建對象的時候會自動調用初始化方法__init__ tom = Cat("TOM") print(tom)
TOM 我來了
我是小貓[TOM]
TOM 我去了
5. 身份運算符
用於 比較 兩個對象的 內存地址 是否一致—是否是對同一個對象的引用
- 在Python中針對 None 比較時,建議使用 is 判斷
- is:例,x is y, 類似 id(x) == id(y))
- is not:例,x is not y, 類似 id(x) != id(b)
註意: is: 判斷兩個對象的引用是否一致; ==:判斷兩個對象的值是否一樣
6. 私有屬性和私有方法: __secret
class Women: def __init__(self, name): self.name = name self.__age = 18 def __secret(self): print("%s 的年齡是 %d" % (self.name, self.__age)) def say(self): self.__secret() xiaofang = Women("小芳") # 私有屬性不能被直接訪問 # print(xiaofang.age) # 在對象的方法內部可以訪問 # 私有方法同樣不可以在外界方法 #xiaofang.__secret() xiaofang.say()
7. 偽私有屬性和私有方法(不推薦使用)
class Women: def __init__(self, name): self.name = name self.__age = 18 def __secret(self): print("%s 的年齡是 %d" % (self.name, self.__age)) def say(self): self.__secret() xiaofang = Women("小芳") # 偽私有方法 print(xiaofang._Women__age) xiaofang._Women__secret()
8. 繼承
8.1 單繼承
8.1.1. 重新實現父類方法
8.1.2. 調用父類方法: super().funName()
# -*- coding: utf-8 -*- """ Created on Fri Feb 22 19:23:57 2019 @author: Douzi """ class Animal: def eat(self): print("吃") def drink(self): print("喝") def run(self): print("跑") def sleep(self): print("睡") class Dog(Animal): def bark(self): print("www") class XiaoTianQuan(Dog): def fly(self): print("飛") def bark(self): print("叫的跟神一樣") # 使用super(). 調用原本在父類中封裝的方法 super().bark() # 父類名.方法(self). 調用父類中封裝方法 Dog.bark(self) dog = Dog() dog.eat() xiaotian = XiaoTianQuan() xiaotian.bark()
吃
叫的跟神一樣
www
www
註意:
子類對象 不能 在自己方法內部 直接 訪問父類的私有屬性或私有方法(可以通過父類公共方法訪問)
子類對象 在外界可以訪問到父類的公有屬性和方法
8.2 多繼承
概念:子類可以擁有多個父類,並且具有 所有父類 的屬性和方法
Python復習筆記(五)面向對象