iT邦幫忙

2024 iThome 鐵人賽

DAY 11
0
Python

進擊的Python系列 第 11

Day11-類別(約翰)

  • 分享至 

  • xImage
  •  

大家好!我是約翰~我分享Python類別

https://ithelp.ithome.com.tw/upload/images/20240824/20163257OTZy4KuOGZ.png
圖片來源:(https://www.peekme.cc/post/1219523#google_vignette)

類別(class)物件導向程式設計核心

在 Python 中,類別(Class)物件導向程式設計 (Object Oriented Programming, OOP) 基礎。可以將類別想像成一個藍圖,這個藍圖定義了物件的 屬性(attributes)方法(methods)物件(object) 則是根據這個藍圖所創建的實體。

基本概念

類別(Class) 抽象的概念,定義物件共同特性
物件(Object) 類別的實例,擁有類別所定義屬性和方法
屬性(Attribute) 物件的資料,代表物件特徵
方法(Method) 物件的行為,代表物件可以做什麼

建立類別

class MyClass:
    # 初始化方法
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 其他方法
    def greet(self):
        print(f"Hello, my name is {self.name} and I am {self.age} years old.")
  • class MyClass:宣告一個名為 MyClass 的類別
  • __init__: 這是初始化方法,當創建一個物件時會自動執行,用來初始化物件的屬性
  • self: 代表物件本身,在方法內部使用 self 來存取物件的屬性

創建物件

# 創建一個 MyClass 的物件
person1 = MyClass("Cindy", 30)

# 呼叫物件的方法
person1.greet()

屬性描述器(Property)

為什麼需要屬性描述器?

  • 讓屬性的存取更具彈性
  • 可以對屬性進行驗證或轉換
  • 可以實現只讀屬性
class Person:
    def __init__(self, name, age):
        self._age = age  # 使用 _age 作為儲存屬性的變數

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("Age cannot be negative")
        self._age = value   

繼承

類別可以繼承自其他類別,子類別會繼承父類別的屬性和方法

class Student(Person):
    def __init__(self, name, age, student_id):
        super().__init__(name, age)
        self.student_id = student_id

封裝

是將資料和方法封裝在類別中,以保護資料的完整性
Python 使用 ___ 來表示私有屬性和方法

多型

允許不同類型的物件使用相同的介面
子類別可以重寫父類別的方法,實現不同行為

模擬簡單汽車

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

    def start(self):
        print("The car has started.")

    def stop(self):
        print("The car has stopp   
ed.")

# 創建一個汽車物件
my_car = Car("Toyota", "Camry", 2023)
my_car.start()

模擬學生

class Student:
    def __init__(self, name, age, grade):
        self.name = name
        self.age = age
        self.grade = grade

    def study(self):
        print(f"{self.name}正在努力學習!")

# 創建一個Student類別的物件
student1 = Student("Alice", 20, "A")
student1.study()

模擬基本銀行帳戶

class BankAccount:
    def __init__(self, balance):
        self.balance = balance

    def deposit(self, amount):
        self.balance += amount
        print("存款成功!餘額為:", self.balance)

    def withdraw(self, amount):
        if amount > self.balance:
            print("餘額不足!")
        else:
            self.balance -= amount
            print("提款成功!餘額為:", self.balance)

模擬小狗

class Dog:
    def __init__(self, name, breed):
        self.name = name
        self.breed = breed

    def bark(self):
        print("汪汪!")

    def eat(self):
        print("正在吃東西...")

# 創建兩個狗的物件
dog1 = Dog("小白", "黃金獵犬")
dog2 = Dog("黑寶", "拉布拉多")

# 呼叫物件的方法
dog1.bark() # 汪汪!
dog2.eat() # 正在吃東西...

柯尼約翰:莎夏謝謝妳

https://ithelp.ithome.com.tw/upload/images/20240824/20163257RRmjfEJsCU.jpg
圖片來源:(https://www.toy-people.com/?p=59388)


上一篇
Day10-模組與封包(莎夏)
下一篇
Day12-可疊代(貝爾托特)
系列文
進擊的Python36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言