1. 程式人生 > >Python復習筆記(五)面向對象

Python復習筆記(五)面向對象

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("這是一個初始化方法")
    def
eat(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復習筆記(五)面向對象