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

Python 中的類class實例詳解

 更新時間:2026年05月29日 09:44:31   作者:夢想不只是夢與想  
這段文章詳細(xì)介紹了Python面向?qū)ο缶幊痰暮诵母拍?文章還強調(diào)了類的命名規(guī)范、實例方法與屬性的區(qū)別、私有屬性的定義及使用@property簡化數(shù)據(jù)類定義的重要性,感興趣的朋友跟隨小編一起看看吧

類是 Python 面向?qū)ο缶幊痰暮诵模糜?strong>定義對象的藍(lán)圖。類封裝了數(shù)據(jù)(屬性)和行為(方法),支持繼承、多態(tài)等特性。

一、類的定義與實例化

1. 基本定義

class Person:
    """定義一個人類"""
    # 類屬性(所有實例共享)
    species = "human"
    # 構(gòu)造方法(初始化實例)
    def __init__(self, name, age):
        # 實例屬性(每個實例獨立)
        self.name = name
        self.age = age
    # 實例方法
    def greet(self):
        return f"Hello, I'm {self.name}"
    def have_birthday(self):
        self.age += 1
        return f"Now I'm {self.age}"
# 創(chuàng)建實例
person1 = Person("Alice", 25)
person2 = Person("Bob", 30)
print(person1.name)        # Alice
print(person1.greet())     # Hello, I'm Alice
print(person1.species)     # human

二、類的組成

1. 構(gòu)造方法__init__

class Student:
    def __init__(self, name, age, grade="大一"):
        self.name = name           # 公有屬性
        self._age = age            # 受保護屬性(約定)
        self.__grade = grade       # 私有屬性(名稱修飾)
        self.scores = []           # 可變屬性
    def get_grade(self):
        return self.__grade
s = Student("Alice", 20)
print(s.name)           # Alice
print(s._age)           # 20(可以訪問,但不建議)
# print(s.__grade)      # AttributeError(名稱修飾)
print(s.get_grade())    # 大一

2. 實例方法、類方法、靜態(tài)方法

class Calculator:
    # 類屬性
    version = "1.0"
    def __init__(self, brand):
        self.brand = brand
    # 實例方法(需要實例調(diào)用,可以訪問實例屬性)
    def add(self, a, b):
        return a + b
    # 類方法(使用 @classmethod,可以訪問類屬性)
    @classmethod
    def get_version(cls):
        return cls.version
    # 靜態(tài)方法(使用 @staticmethod,獨立于類和實例)
    @staticmethod
    def multiply(a, b):
        return a * b
calc = Calculator("Casio")
print(calc.add(3, 5))           # 8(實例方法)
print(Calculator.get_version()) # 1.0(類方法)
print(Calculator.multiply(3, 5))# 15(靜態(tài)方法)

3. 屬性裝飾器(@property)

class Circle:
    def __init__(self, radius):
        self._radius = radius
    # getter
    @property
    def radius(self):
        return self._radius
    # setter
    @radius.setter
    def radius(self, value):
        if value <= 0:
            raise ValueError("半徑必須大于0")
        self._radius = value
    @property
    def area(self):
        """只讀屬性,沒有 setter"""
        return 3.14159 * self._radius ** 2
c = Circle(5)
print(c.radius)     # 5
c.radius = 10       # 使用 setter
# c.area = 100      # AttributeError: can't set attribute
print(c.area)       # 314.159

三、繼承

1. 單繼承

# 父類(基類)
class Animal:
    def __init__(self, name):
        self.name = name
    def speak(self):
        return "一些聲音"
    def move(self):
        return f"{self.name} 在移動"
# 子類(派生類)
class Dog(Animal):
    def speak(self):
        return "汪汪"
    def wag_tail(self):
        return "搖尾巴"
class Cat(Animal):
    def speak(self):
        return "喵喵"
    def climb(self):
        return "爬樹"
dog = Dog("旺財")
cat = Cat("咪咪")
print(dog.speak())      # 汪汪(重寫了父類方法)
print(dog.move())       # 旺財 在移動(繼承父類方法)
print(dog.wag_tail())   # 搖尾巴(子類特有)
print(cat.speak())      # 喵喵
print(cat.climb())      # 爬樹

2. 多重繼承

class Flyer:
    def fly(self):
        return "飛行中"
    def move(self):
        return "飛飛飛"
class Swimmer:
    def swim(self):
        return "游泳中"
    def move(self):
        return "游游游"
# 多重繼承(按 MRO 順序查找方法)
class Duck(Flyer, Swimmer):
    def move(self):
        # 調(diào)用指定父類的方法
        return f"{Flyer.move(self)} 并且 {Swimmer.move(self)}"
duck = Duck()
print(duck.fly())       # 飛行中
print(duck.swim())      # 游泳中
print(duck.move())      # 飛飛飛 并且 游游游
print(Duck.__mro__)     # 查看方法解析順序

3. 使用super()

class Parent:
    def __init__(self, name):
        self.name = name
        print(f"Parent init: {name}")
    def greet(self):
        return f"Parent: {self.name}"
class Child(Parent):
    def __init__(self, name, age):
        super().__init__(name)      # 調(diào)用父類構(gòu)造方法
        self.age = age
        print(f"Child init: {age}")
    def greet(self):
        # 調(diào)用父類方法并擴展
        parent_greet = super().greet()
        return f"{parent_greet}, age {self.age}"
c = Child("Alice", 25)
print(c.greet())  # Parent: Alice, age 25

四、多態(tài)

class Shape:
    def area(self):
        pass
class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height
    def area(self):
        return self.width * self.height
class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius
    def area(self):
        return 3.14159 * self.radius ** 2
# 多態(tài):同一接口,不同實現(xiàn)
def print_area(shape):
    print(f"面積: {shape.area()}")
shapes = [Rectangle(3, 4), Circle(5)]
for shape in shapes:
    print_area(shape)
# 面積: 12
# 面積: 78.53975

五、特殊方法(魔術(shù)方法)

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    # 字符串表示(供開發(fā)者)
    def __repr__(self):
        return f"Point({self.x}, {self.y})"
    # 字符串表示(供用戶)
    def __str__(self):
        return f"({self.x}, {self.y})"
    # 加法
    def __add__(self, other):
        return Point(self.x + other.x, self.y + other.y)
    # 相等比較
    def __eq__(self, other):
        return self.x == other.x and self.y == other.y
    # 長度(len())
    def __len__(self):
        return int((self.x ** 2 + self.y ** 2) ** 0.5)
    # 可迭代
    def __iter__(self):
        yield self.x
        yield self.y
p1 = Point(3, 4)
p2 = Point(1, 2)
print(str(p1))      # (3, 4)
print(repr(p1))     # Point(3, 4)
print(p1 + p2)      # (4, 6)
print(p1 == Point(3, 4))  # True
print(len(p1))      # 5
for coord in p1:
    print(coord)    # 3, 4

六、常用魔術(shù)方法

魔術(shù)方法觸發(fā)時機用途
__init__(self, ...)創(chuàng)建實例時初始化屬性
__str__(self)print(obj)str(obj)用戶友好的字符串
__repr__(self)repr(obj)、調(diào)試開發(fā)者友好的字符串
__len__(self)len(obj)返回長度
__getitem__(self, key)obj[key]索引訪問
__setitem__(self, key, value)obj[key] = value索引賦值
__iter__(self)for x in obj迭代器
__add__(self, other)obj + other加法
__eq__(self, other)obj == other相等比較
__lt__(self, other)obj < other小于比較
__call__(self, ...)obj()對象作為函數(shù)調(diào)用

七、數(shù)據(jù)類(dataclass)

from dataclasses import dataclass, field
@dataclass
class Person:
    name: str
    age: int = 0  # 默認(rèn)值
    tags: list = field(default_factory=list)  # 可變類型需要 default_factory
    # 自動生成 __init__、__repr__、__eq__ 等
    def greet(self):
        return f"Hello, I'm {self.name}"
p1 = Person("Alice", 25)
p2 = Person("Alice", 25)
p3 = Person("Bob", 30)
print(p1)               # Person(name='Alice', age=25)
print(p1 == p2)         # True(自動比較屬性)
print(p1 == p3)         # False
print(p1.greet())       # Hello, I'm Alice

八、抽象類(ABC)

from abc import ABC, abstractmethod
class Vehicle(ABC):
    def __init__(self, brand):
        self.brand = brand
    @abstractmethod
    def start(self):
        """抽象方法,子類必須實現(xiàn)"""
        pass
    @abstractmethod
    def stop(self):
        pass
    def honk(self):
        """普通方法,子類可以直接繼承"""
        return "滴滴"
class Car(Vehicle):
    def start(self):
        return f"{self.brand} 汽車啟動"
    def stop(self):
        return f"{self.brand} 汽車停止"
# vehicle = Vehicle()  # TypeError: 不能實例化抽象類
car = Car("Tesla")
print(car.start())   # Tesla 汽車啟動
print(car.honk())    # 滴滴

九、屬性訪問控制

class User:
    def __init__(self, name):
        self._name = name      # 受保護(約定)
        self.__password = "123" # 私有(名稱修飾)
    @property
    def name(self):
        return self._name
    @name.setter
    def name(self, value):
        if not value:
            raise ValueError("名字不能為空")
        self._name = value
    @property
    def password(self):
        return "***"  # 只讀屬性,不返回真實密碼
u = User("Alice")
print(u.name)       # Alice
u.name = "Bob"
# u.name = ""       # ValueError
print(u._name)      # Bob(可以訪問,但遵守約定不直接訪問)
print(u.password)   # ***
# print(u.__password) # AttributeError(名稱修飾)

來一個總結(jié)把

概念說明
對象的藍(lán)圖
實例根據(jù)類創(chuàng)建的具體對象
實例屬性每個實例獨有的屬性(self.attr
類屬性所有實例共享的屬性(直接在類中定義)
實例方法第一個參數(shù)是 self,操作實例屬性
類方法使用 @classmethod,第一個參數(shù)是 cls
靜態(tài)方法使用 @staticmethod,無特殊參數(shù)
繼承子類繼承父類的屬性和方法
多態(tài)同一方法名在不同類中有不同實現(xiàn)
屬性裝飾器@property、@setter、@deleter
魔術(shù)方法以雙下劃線開頭和結(jié)尾的特殊方法

要點

  • 類命名用駝峰命名法(如 MyClass
  • 實例方法第一個參數(shù)必須是 self
  • 使用 __init__ 初始化實例屬性
  • 私有屬性用雙下劃線開頭(__name
  • 使用 @property 實現(xiàn) getter/setter
  • dataclass 簡化數(shù)據(jù)類定義

到此這篇關(guān)于Python 中的類class實例詳解的文章就介紹到這了,更多相關(guān)Python類class內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python的IDEL增加清屏功能實例

    Python的IDEL增加清屏功能實例

    下面小編就為大家?guī)硪黄狿ython的IDEL增加清屏功能實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 使用Python實現(xiàn)給企業(yè)微信發(fā)送消息功能

    使用Python實現(xiàn)給企業(yè)微信發(fā)送消息功能

    本文將介紹如何使用python3給企業(yè)微信發(fā)送消息,文中有詳細(xì)的圖文解說及代碼示例,對正在學(xué)習(xí)python的小伙伴很有幫助,需要的朋友可以參考下
    2021-12-12
  • python的print輸出在控制臺并且將輸出內(nèi)容保存為文件(最新推薦)

    python的print輸出在控制臺并且將輸出內(nèi)容保存為文件(最新推薦)

    這篇文章主要介紹了python的print輸出在控制臺并且將輸出內(nèi)容保存為文件,我感覺就是類似于重寫一下調(diào)用print的時候執(zhí)行的方法,讓他既能夠在控制臺輸出,也能保存到文件里去,需要的朋友可以參考下
    2023-01-01
  • python使用建議技巧分享(三)

    python使用建議技巧分享(三)

    這篇文章主要介紹了python的一些使用建議技巧分享,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-08-08
  • python區(qū)塊及區(qū)塊鏈的開發(fā)詳解

    python區(qū)塊及區(qū)塊鏈的開發(fā)詳解

    這篇文章主要介紹了python區(qū)塊及區(qū)塊鏈的開發(fā)詳解的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • python計數(shù)排序和基數(shù)排序算法實例

    python計數(shù)排序和基數(shù)排序算法實例

    這篇文章主要介紹了python計數(shù)排序和基數(shù)排序算法實例,需要的朋友可以參考下
    2014-04-04
  • Tensorflow矩陣運算實例(矩陣相乘,點乘,行/列累加)

    Tensorflow矩陣運算實例(矩陣相乘,點乘,行/列累加)

    今天小編就為大家分享一篇Tensorflow矩陣運算實例(矩陣相乘,點乘,行/列累加),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 如何利用Python擬合函數(shù)曲線詳解

    如何利用Python擬合函數(shù)曲線詳解

    在實際項目中,往往有這樣的需求:對采集到的數(shù)據(jù)進行數(shù)據(jù)處理(曲線擬合),再計算出一些想要的參數(shù),比如峰值/dip值/周期等等,下面這篇文章主要給大家介紹了關(guān)于如何利用Python擬合函數(shù)曲線的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • python小練習(xí)題之條件語句if

    python小練習(xí)題之條件語句if

    這篇文章主要介紹了python小練習(xí)題之條件語句if的相關(guān)資料,文中介紹了年齡判斷、身高判斷、數(shù)字奇偶性判斷、閏年判斷、水仙花數(shù)判斷、成績等級判斷以及三角形判斷等常見場景,需要的朋友可以參考下
    2024-12-12
  • numpy.random.shuffle打亂順序函數(shù)的實現(xiàn)

    numpy.random.shuffle打亂順序函數(shù)的實現(xiàn)

    這篇文章主要介紹了numpy.random.shuffle打亂順序函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評論

繁峙县| 彩票| 绍兴市| 米易县| 和平区| 平谷区| 江山市| 辽宁省| 嵊泗县| 皮山县| 汝州市| 宁国市| 上林县| 光山县| 高碑店市| 都匀市| 北流市| 句容市| 余干县| 富阳市| 攀枝花市| 凤山市| 天长市| 万安县| 丹棱县| 肥乡县| 卓尼县| 炉霍县| 原平市| 固安县| 塔河县| 铜鼓县| 房山区| 志丹县| 灵山县| 温宿县| 清镇市| 长葛市| 察哈| 灵川县| 富蕴县|