最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python面向?qū)ο缶幊?nbsp;Class詳解

 更新時(shí)間:2026年04月06日 08:32:13   作者:shacofun  
本文介紹了面向過程編程和面向?qū)ο缶幊痰母拍?包括類、對(duì)象、封裝、繼承、多態(tài)、抽象等基礎(chǔ)知識(shí),并通過實(shí)例講解了如何創(chuàng)建類、修改屬性值、實(shí)現(xiàn)類的繼承、特殊方法以及訪問控制等高級(jí)特性,感興趣的朋友跟隨小編一起看看吧

一、概念

1?? 面向過程編程(Procedural Programming)/pr??si?d??r?l/
以“步驟”為核心,比如C語(yǔ)言,一步一步執(zhí)行
2?? 面向?qū)ο缶幊蹋∣OP)
以“對(duì)象”為核心,比如Java、C++、Python,把現(xiàn)實(shí)世界抽象成“類”和“對(duì)象”

  • 類 (Class): 類就是制造對(duì)象的一個(gè)模板或藍(lán)圖。它定義了一類事物共有的屬性(數(shù)據(jù))和行為(方法)。
  • 對(duì)象 (Object): 根據(jù)類創(chuàng)建出來的具體實(shí)例。
  • 屬性(Attributes)/??tr?bju?ts/:屬性就是對(duì)象的特點(diǎn)或信息
  • 方法(Methods)/?meθ?dz/:法就是對(duì)象能做的動(dòng)作或功能。

四大特性

  • 封裝 (Encapsulation)/?n?kæpsju?le??(?)n/:封裝是將數(shù)據(jù)和操作數(shù)據(jù)的方法綁定在一起,并對(duì)外隱藏內(nèi)部細(xì)節(jié)。通過控制訪問權(quán)限(如 private, public),我們只暴露必要的接口
  • 繼承 (Inheritance)/?n?her?t?ns/:繼承允許一個(gè)類(子類)獲取另一個(gè)類(父類)的屬性和方法。子類可以在保留父類功能的基礎(chǔ)上,增加新的功能或修改既有功能。
  • 多態(tài) (Polymorphism)/?pɑ?l??m??r?f?z?m/:多態(tài)是指“同一種行為,在不同的對(duì)象上有不同的表現(xiàn)形式”。比如“動(dòng)物”類有一個(gè)“叫”的方法。當(dāng)它是“狗”對(duì)象時(shí),輸出“汪汪”;當(dāng)它是“貓”對(duì)象時(shí),輸出“喵喵”。
  • 抽象 (Abstraction)/æb?stræk?n/: 抽象是簡(jiǎn)化現(xiàn)實(shí)世界復(fù)雜性的過程。只關(guān)注與當(dāng)前目標(biāo)相關(guān)的特性,而忽略無(wú)關(guān)的細(xì)節(jié)。比如在開發(fā)“掛號(hào)系統(tǒng)”時(shí),我們只需要“病人”的姓名、病歷號(hào),而不需要知道他的身高或喜歡的顏色。

二、實(shí)操

2.1 創(chuàng)建第一個(gè)類

#定義類
class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year

    def get_info(self):
        return f"{self.year} {self.make} {self.model}"
        
    def start_engine(self):
        info = self.get_info() # 類的方法內(nèi)部也可以互相調(diào)用
        print(f"{info} 啟動(dòng)了!")
#創(chuàng)建對(duì)象        
car1 = Car("Toyota", "Camry", 2020)
#調(diào)用方法
print(car1.get_info())
car1.start_engine()

----輸出:
2020 Toyota Camry
2020 Toyota Camry 啟動(dòng)了!

解析
class (類),是用來定義一個(gè)類的關(guān)鍵字,在這里,我們定義了一個(gè)名為 Car的類。【類】
__init__ (構(gòu)造函數(shù)),核心就是為了初始化,不寫此函數(shù)需要手動(dòng)賦值
get_info() :類中的方法**【方法】**
car1:使用Car類創(chuàng)建出car1對(duì)象**【對(duì)象】**
car1.get_info():對(duì)象調(diào)用類里get_info方法
self: 當(dāng)前這個(gè)對(duì)象自己
make, model, year: 傳入的參數(shù) 【屬性】
make, model, year 在 __init__ 的括號(hào)里是形參(占位符);而你在 Car(“Toyota”, “Camry”, 2020) 里傳入的是實(shí)參(具體的值)

如果出現(xiàn)中文亂碼:在代碼開始位置加入

import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

2.2 修改屬性值

  • 動(dòng)態(tài)修改屬性 :
    可以在創(chuàng)建對(duì)象之后,通過直接訪問屬性來修改它們的值。
#修改屬性的值
car1.year = 2021
print(car1.get_info())
  • 動(dòng)態(tài)添加新屬性:
    可以添加類定義里根本沒有的屬性。
car1.color = "Red" # 可以動(dòng)態(tài)添加屬性
print(f"{car1.get_info()} 的顏色是 {car1.color}")
  • 使用內(nèi)置函數(shù)修改:
    setattr(obj, name, val) 設(shè)置屬性值
    getattr(obj, name) 獲取屬性值
    delattr(obj, name) 刪除屬性
    hasattr(obj, name) 檢查是否有某屬性
  • 帶有參數(shù)的方法:
class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year

    def get_info(self,start):# start 是臨時(shí)傳入的變量
        return f"{self.year} {self.make} {self.model}{start}"
    
          
car1 = Car("Toyota", "Camry", 2020)

print(car1.get_info("啟動(dòng)了")) #輸出2020 Toyota Camry啟動(dòng)了

2.3 類的繼承

子承父業(yè)

class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        
    def get_info(self):
        return f"{self.year} {self.make} {self.model}"    

class ElectricCar(Car):
    def __init__(self, make, model, year, battery_size):
        #super()函數(shù)調(diào)用父類的構(gòu)造方法,初始化父類的屬性
        super().__init__(make, model, year)
        #子類特有的屬性
        self.battery_size = battery_size

#子類特有的方法
    def get_battery_info(self):
        return f"Battery size: {self.battery_size} kWh"
         
car1 = Car("Toyota", "Camry", 2020)
car2 = ElectricCar("Toyota", "Camry", 2020, 100)
print(car1.get_info())#輸出:2020 Toyota Camry
print(car2.get_battery_info())#輸出:Battery size: 100 kWh
print(car2.get_info() + " " + car2.get_battery_info())#輸出:2020 Toyota Camry Battery size: 100 kWh

super() :它是子類向父類“借東西”的工具。super().init(…) 的意思是:先把父類里定義好的初始化邏輯跑一遍
如果子類想修改父類方法,直接重寫即可

 def get_info(self):
        # 調(diào)用父類的方法獲取基礎(chǔ)信息,再加上電車特有的信息
        basic_info = super().get_info()
        return f"{basic_info} (純電動(dòng)模式)"
print(car2.get_info()) #輸出2020 Toyota Camry (純電動(dòng)模式)

2.4 類的特殊方法

名稱前后都有雙下劃線
A. 生命周期類(對(duì)象的創(chuàng)建與銷毀)
__init__(self, …)`: 初始化方法。在創(chuàng)建對(duì)象時(shí)自動(dòng)調(diào)用,用于設(shè)置初始屬性。

__new__(self, ...): 創(chuàng)建實(shí)例的方法。在 __init__ 之前執(zhí)行,通常在自定義元類或單例模式時(shí)才用到。

__del__(self): 析構(gòu)方法。當(dāng)對(duì)象被銷毀(垃圾回收)時(shí)觸發(fā)。
B. 字符串表示類(讓對(duì)象“好看”)
這是開發(fā)中最常用的,用來定義當(dāng)你 print 一個(gè)對(duì)象時(shí)顯示什么。
__str__print(obj)str(obj)給用戶看的,返回友好的描述
__repr__ : 直接輸入對(duì)象名或 repr(obj)給開發(fā)者看的,返回準(zhǔn)確的調(diào)試信息

class Car:
    def __init__(self, make, model):
        self.make = make
        self.model = model

    def __str__(self):
        return f"這是一輛 {self.make} {self.model}"

car = Car("Toyota", "Camry")
print(car)  # 輸出: 這是一輛 Toyota Camry
#平時(shí)調(diào)用是直接

C. 算術(shù)運(yùn)算符類(讓對(duì)象能加減乘除)
如果你想讓兩個(gè)對(duì)象相加(比如 car1 + car2),你需要定義這些方法:
__add__(self, other): 對(duì)應(yīng) +
__sub__(self, other): 對(duì)應(yīng) -
__mul__(self, other): 對(duì)應(yīng) *
__eq__(self, other): 對(duì)應(yīng) ==
D. 長(zhǎng)度與容器類(讓對(duì)象像列表一樣工作)
__len__(self): 對(duì)應(yīng) len(obj)。
__getitem__(self, key): 對(duì)應(yīng) obj[key],讓對(duì)象可以像字典或列表一樣取值。
__contains__(self, item): 對(duì)應(yīng) item in obj。

2.5 類的訪問控制

在 Python 中,類的訪問控制主要依靠命名約定和名稱修飾,來提示開發(fā)者哪些屬性和方法不應(yīng)該被外部代碼直接訪問或修改。

訪問類型格式外部訪問
Publicname?
Protected_name??
Private__name?
class Example:
    def __init__(self):
        self._protected_var = "這是一個(gè)受保護(hù)的屬性"
    def _protected_method(self):
        return "這是一個(gè)受保護(hù)的方法"

obj=Example()
print(obj._protected_var)  # 輸出: 這是一個(gè)受保護(hù)的屬性
print(obj._protected_method())  # 輸出: 這是一個(gè)受保護(hù)的方法
class Example:
    def __init__(self):
        self.__private_var = "這是一個(gè)私有的屬性"
    def __private_method(self):
        return "這是一個(gè)私有方法"

obj=Example()      
# print(obj.__private_var)  # 輸出: 報(bào)錯(cuò)  
# print(obj.__private_method())  # 輸出: 報(bào)錯(cuò)     
print(obj._Example__private_var)  # 輸出: 這是一個(gè)私有的屬性
print(obj._Example__private_method())  # 輸出: 這是一個(gè)私有方法

Getter (訪問器) 和 Setter (修改器):

class User:
    def __init__(self, age):
        self.__age = age

    def get_age(self):
        return self.__age

    def set_age(self, value):
        self.__age = value

u = User(20)
u.set_age(21)   
print(u.get_age())

Pythonic 風(fēng)格(使用 @property裝飾器)
在不修改原函數(shù)代碼的前提下,給函數(shù)添加額外的功能。
在代碼中,裝飾器以 @裝飾器名 的形式放在函數(shù)定義的上方.

class User:
    def __init__(self,age):
        self.__age=age
    @property
    def age(self):
        return self.__age
    @age.setter
    def age(self,value):
        if value < 0:
            print("年齡不能為負(fù)數(shù)")
        else:
            self.__age = value

user = User(25)
print(user.age)  # 輸出: 25
user.age = -5  # 輸出: 年齡不能為負(fù)數(shù)
print(user.age)  # 輸出: 25 (年齡沒有改變)

相關(guān)學(xué)習(xí)代碼下載見附件

到此這篇關(guān)于Python面向?qū)ο缶幊?Class詳解的文章就介紹到這了,更多相關(guān)Python面向?qū)ο缶幊?Class內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實(shí)現(xiàn)超級(jí)瑪麗游戲

    python實(shí)現(xiàn)超級(jí)瑪麗游戲

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)超級(jí)瑪麗游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Python網(wǎng)絡(luò)編程詳解

    Python網(wǎng)絡(luò)編程詳解

    這篇文章主要介紹了Python網(wǎng)絡(luò)編程詳解,涉及具體代碼示例,還是挺不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • python利用json和pyecharts畫折線圖實(shí)例代碼

    python利用json和pyecharts畫折線圖實(shí)例代碼

    這篇文章主要介紹了python利用json和pyecharts畫折線圖實(shí)例,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Django 跨域請(qǐng)求處理的示例代碼

    Django 跨域請(qǐng)求處理的示例代碼

    本篇文章主要介紹了Django 跨域請(qǐng)求處理的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • python中WSGI是什么,Python應(yīng)用WSGI詳解

    python中WSGI是什么,Python應(yīng)用WSGI詳解

    這篇文章主要介紹一下python中的WSGI, 小編在網(wǎng)上找了幾篇非常好的關(guān)于WSGI介紹,整理一下分享給大家。
    2017-11-11
  • Python代理抓取并驗(yàn)證使用多線程實(shí)現(xiàn)

    Python代理抓取并驗(yàn)證使用多線程實(shí)現(xiàn)

    這里沒有使用隊(duì)列只是采用多線程分發(fā)對(duì)代理量不大的網(wǎng)頁(yè)還行但是幾百幾千性能就很差了,感興趣的朋友可以了解下,希望對(duì)你有所幫助
    2013-05-05
  • Python解析cyber record文件的示例詳解

    Python解析cyber record文件的示例詳解

    cyber record 是 Cyber RT 中用于錄制和回放數(shù)據(jù)的工具,本文將為大家展示一下如何使用Python進(jìn)行解析cyber record文件,需要的可以參考下
    2025-02-02
  • python如何創(chuàng)建等差數(shù)列

    python如何創(chuàng)建等差數(shù)列

    這篇文章主要介紹了python如何創(chuàng)建等差數(shù)列的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Pytest測(cè)試框架基本使用方法詳解

    Pytest測(cè)試框架基本使用方法詳解

    這篇文章主要介紹了Pytest測(cè)試框架基本使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Django項(xiàng)目創(chuàng)建到啟動(dòng)詳解(最全最詳細(xì))

    Django項(xiàng)目創(chuàng)建到啟動(dòng)詳解(最全最詳細(xì))

    這篇文章主要給大家介紹了關(guān)于Django項(xiàng)目創(chuàng)建到啟動(dòng)的步驟,本文介紹的方法算是最全最詳細(xì)的一個(gè)項(xiàng)目,需要的朋友可以參考下
    2019-09-09

最新評(píng)論

沅江市| 宜昌市| 长治市| 德州市| 晋中市| 天津市| 淮北市| 琼结县| 磴口县| 永新县| 宣威市| 吴旗县| 桓台县| 安福县| 仪征市| 咸丰县| 彭山县| 庆城县| 陇西县| 左贡县| 淮滨县| 陆河县| 囊谦县| 麟游县| 富民县| 上犹县| 南宫市| 高清| 错那县| 象州县| 克什克腾旗| 久治县| 营山县| 利川市| 襄垣县| 宁陵县| 隆尧县| 新泰市| 永靖县| 上思县| 武山县|