在Python中,類是面向對象編程的核心概念之一。類定義了對象的屬性和行為。在Python中,我們使用class關鍵字定義一個類,而對象則是根據類定義創建的實例。
一、定義類
在Python中,定義一個類的語法為:
class ClassName:
def __init__(self, parameters):
# 初始化方法
pass
def method_name(self, parameters):
# 方法定義
pass
這裡的__init__
是類的構造函數,用來初始化類的屬性。self代表類的實例本身。在類的其他方法中,也要以self作為第一個參數。
以下是一個例子,定義一個Person類:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def say_hello(self):
print(f"Hello, my name is {self.name}. I'm {self.age} years old.")
person = Person("Tom", 25)
person.say_hello()
這個例子中,我們定義了一個Person類,有兩個屬性name和age,以及一個方法say_hello。通過person = Person("Tom", 25)
創建了一個Person對象,並調用了say_hello方法。
二、繼承
在Python中,我們可以使用繼承來創建一個新的類,該類繼承了另一個類的屬性和方法。被繼承的類稱為父類,繼承的類稱為子類。
以下是一個例子,定義了一個Student類,它繼承自Person類:
class Student(Person):
def __init__(self, name, age, grade):
super().__init__(name, age) # 調用父類的構造函數
self.grade = grade
def say_hello(self):
print(f"Hello, my name is {self.name}. I'm {self.age} years old. I'm in grade {self.grade}.")
student = Student("Amy", 18, 12)
student.say_hello()
這個例子中,我們定義了一個Student類,繼承了Person類的屬性和方法。通過super().__init__(name, age)
調用了父類的構造函數,初始化了name和age屬性。並添加了一個新的grade屬性和say_hello方法。
三、多態
多態是面向對象編程中的一個重要概念,指的是相同的接口可以用不同的實例進行實現。在Python中,多態可以通過繼承和方法重寫來實現。
以下是一個例子:
class Animal:
def __init__(self, name):
self.name = name
def make_sound(self):
pass
class Dog(Animal):
def make_sound(self):
print("Bark!")
class Cat(Animal):
def make_sound(self):
print("Meow!")
def animal_sound(animal):
animal.make_sound()
dog = Dog("Tommy")
cat = Cat("Kitty")
animal_sound(dog) # 輸出"Bark!"
animal_sound(cat) # 輸出"Meow!"
這個例子中,我們定義了一個Animal類,有一個make_sound方法,但是該方法為空。繼承了Animal類的Dog和Cat類,實現了各自的make_sound方法。animal_sound函數接受一個Animal對象作為參數,調用其make_sound方法,並輸出相應的聲音。
四、封裝
在Python中,封裝是一種將屬性和方法包裝在一起的機制,可以控制類的訪問權限。
以下是一個例子:
class BankAccount:
def __init__(self, balance, account_number, password):
self.balance = balance
self.account_number = account_number
self.__password = password
def deposit(self, amount):
self.balance += amount
def withdraw(self, amount, password):
if password == self.__password:
self.balance -= amount
else:
print("Incorrect password.")
account = BankAccount(1000, "123456789", "password123")
print(account.balance) # 輸出1000
account.deposit(500)
print(account.balance) # 輸出1500
account.withdraw(200, "password123")
print(account.balance) # 輸出1300
account.__password = "new_password" # __password是私有變量,無法直接訪問或修改
account.withdraw(200, "new_password") # 輸出"Incorrect password."
這個例子中,我們定義了一個BankAccount類,有三個屬性:balance、account_number和__password。其中,__password是私有變量,無法直接訪問或修改。deposit和withdraw方法可以訪問和修改balance屬性,withdraw方法需要輸入正確的__password才能操作。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/257437.html