Python 类定义的五大要点
在 Python 中,类是面向对象编程的核心。通过类,我们可以创建自定义数据类型,封装数据和方法,实现代码的复用性和模块化。本文将详细介绍 Python 类定义的五大要点,帮助你更好地理解和使用类。
1. 定义类的基本语法
首先,让我们来看看如何定义一个基本的类。类的定义使用 class
关键字,后跟类名和冒号。类体包含类的方法和属性。
class Dog:
# 类属性
species = "Canis familiaris"
# 初始化方法
def __init__(self, name, age):
self.name = name
self.age = age
# 实例方法
def description(self):
return f"{self.name} is {self.age} years old."
# 另一个实例方法
def speak(self, sound):
return f"{self.name} says {sound}"
代码解释:
class Dog:
定义了一个名为Dog
的类。species = "Canis familiaris"
是一个类属性,所有实例共享这个属性。__init__
方法是一个特殊方法,用于初始化新创建的对象。self
参数代表实例本身。description
和speak
是实例方法,可以通过实例调用。
2. 初始化方法 __init__
__init__
方法是一个特殊方法,也称为构造函数。它在创建类的实例时自动调用,用于初始化对象的状态。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# 创建实例
person1 = Person("Alice", 30)
person2 = Person("Bob", 25)
print(person1.name) # 输出: Alice
print(person2.age) # 输出: 25
代码解释:
__init__
方法接收两个参数name
和age
,并将它们赋值给实例的属性。创建 Person
类的实例时,传入name
和age
参数,这些参数被传递给__init__
方法。
3. 类属性 vs 实例属性
类属性是所有实例共享的属性,而实例属性是每个实例独有的属性。
class Car:
# 类属性
wheels = 4
def __init__(self, make, model):
# 实例属性
self.make = make
self.model = model
# 创建实例
car1 = Car("Toyota", "Corolla")
car2 = Car("Honda", "Civic")
print(car1.wheels) # 输出: 4
print(car2.wheels) # 输出: 4
print(car1.make) # 输出: Toyota
print(car2.make) # 输出: Honda
代码解释:
wheels
是一个类属性,所有Car
实例共享这个属性。make
和model
是实例属性,每个Car
实例都有自己的make
和model
属性。
4. 方法的类型
Python 类中有三种方法:实例方法、类方法和静态方法。
实例方法:最常用的方法,第一个参数必须是 self
,代表实例本身。类方法:使用 @classmethod
装饰器定义,第一个参数是cls
,代表类本身。静态方法:使用 @staticmethod
装饰器定义,不接收self
或cls
参数。
class Circle:
pi = 3.14159
def __init__(self, radius):
self.radius = radius
# 实例方法
def area(self):
return Circle.pi * (self.radius ** 2)
# 类方法
@classmethod
def from_diameter(cls, diameter):
return cls(diameter / 2)
# 静态方法
@staticmethod
def is_positive(number):
return number > 0
# 创建实例
circle1 = Circle(5)
circle2 = Circle.from_diameter(10)
print(circle1.area()) # 输出: 78.53975
print(circle2.area()) # 输出: 78.53975
print(Circle.is_positive(5)) # 输出: True
代码解释:
area
是一个实例方法,计算圆的面积。from_diameter
是一个类方法,根据直径创建Circle
实例。is_positive
是一个静态方法,判断一个数是否为正数。
5. 继承和多态
继承允许一个类(子类)继承另一个类(父类)的属性和方法。多态是指子类可以覆盖或扩展父类的方法。
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError("Subclass must implement this abstract method")
class Dog(Animal):
def speak(self):
return f"{self.name} says Woof!"
class Cat(Animal):
def speak(self):
return f"{self.name} says Meow!"
# 创建实例
dog = Dog("Buddy")
cat = Cat("Whiskers")
print(dog.speak()) # 输出: Buddy says Woof!
print(cat.speak()) # 输出: Whiskers says Meow!
代码解释:
Animal
类是一个基类,定义了speak
方法,但没有具体实现。Dog
和Cat
类继承自Animal
类,并实现了speak
方法。创建 Dog
和Cat
实例时,调用各自的speak
方法。
实战案例:银行账户管理系统
假设我们要创建一个简单的银行账户管理系统,包括账户类和交易类。我们将使用类和继承来实现这一功能。
class Account:
def __init__(self, account_number, balance=0):
self.account_number = account_number
self.balance = balance
def deposit(self, amount):
if amount > 0:
self.balance += amount
print(f"Deposited {amount}. New balance: {self.balance}")
else:
print("Deposit amount must be positive.")
def withdraw(self, amount):
if 0 < amount <= self.balance:
self.balance -= amount
print(f"Withdrew {amount}. New balance: {self.balance}")
else:
print("Invalid withdrawal amount.")
def get_balance(self):
return self.balance
class SavingsAccount(Account):
def __init__(self, account_number, balance=0, interest_rate=0.01):
super().__init__(account_number, balance)
self.interest_rate = interest_rate
def add_interest(self):
interest = self.balance * self.interest_rate
self.deposit(interest)
print(f"Added interest of {interest}. New balance: {self.balance}")
# 创建实例
account1 = Account("1234567890", 1000)
savings_account1 = SavingsAccount("0987654321", 2000, 0.02)
account1.deposit(500) # 输出: Deposited 500. New balance: 1500
account1.withdraw(200) # 输出: Withdrew 200. New balance: 1300
savings_account1.deposit(1000) # 输出: Deposited 1000. New balance: 3000
savings_account1.add_interest() # 输出: Added interest of 60.0. New balance: 3060
代码解释:
Account
类是基类,定义了存款、取款和获取余额的方法。SavingsAccount
类继承自Account
类,增加了计算利息的功能。创建 Account
和SavingsAccount
实例,测试各种方法的调用。
总结
本文介绍了 Python 类定义的五大要点:1. 基本语法:使用 class
关键字定义类。2. 初始化方法 __init__
:用于初始化对象的状态。3. 类属性 vs 实例属性:类属性共享,实例属性独有。4. 方法的类型:实例方法、类方法和静态方法。5. 继承和多态:子类可以继承父类的属性和方法,并可以覆盖或扩展这些方法。
通过实战案例,我们进一步巩固了对类的理解和应用。
好了,今天的分享就到这里了,我们下期见。如果本文对你有帮助,请动动你可爱的小手指点赞、转发、在看吧!
付费合集推荐
文末福利
公众号消息窗口回复“编程资料”,获取Python编程、人工智能、爬虫等100+本精品电子书。