在 Python 中,类是面向对象编程的核心概念之一。类允许我们定义对象的模板,指定对象的属性和方法,并能在创建实例时进行初始化。以下是一些常见的与类相关的操作:
1. 定义类
类通过 class
关键字来定义。例如:
class Person:
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.")
2. 创建类的实例
类定义之后,我们可以通过调用类名来创建实例。
p1 = Person("Alice", 30) # 创建 Person 类的一个实例
p1.greet() # 输出: Hello, my name is Alice and I am 30 years old.
3. 访问和修改实例变量
实例变量是绑定到特定实例上的,可以通过实例来访问和修改。
print(p1.name) # 输出: Alice
p1.age = 31 # 修改实例的属性
print(p1.age) # 输出: 31
4. 类方法和静态方法
类方法(@classmethod
)和静态方法(@staticmethod
)是与实例无关的函数。它们通常用于提供额外的功能,而不需要直接访问实例的数据。
- 类方法: 第一个参数是
cls
,表示类本身。 - 静态方法: 不需要访问实例或类的任何数据。
class MyClass:
class_var = 0 # 类变量
def __init__(self, value):
self.value = value
@classmethod
def increment_class_var(cls):
cls.class_var += 1
@staticmethod
def say_hello():
print("Hello from the static method!")
# 使用类方法
MyClass.increment_class_var()
print(MyClass.class_var) # 输出: 1
# 使用静态方法
MyClass.say_hello() # 输出: Hello from the static method!
5. 继承
Python 支持类的继承,可以通过继承父类的属性和方法来扩展子类的功能。
class Animal:
def speak(self):
print("Animal speaks")
class Dog(Animal):
def speak(self):
print("Dog barks")
d = Dog()
d.speak() # 输出: Dog barks
6. 重写方法(Method Overriding)
子类可以重写父类的方法,提供特定的实现。
class Dog(Animal):
def speak(self): # 重写父类的 speak 方法
print("Woof!")
d = Dog()
d.speak() # 输出: Woof!
7. 多态(Polymorphism)
多态指的是不同类的对象可以通过相同的方法名称表现不同的行为。比如,speak()
方法在不同的类中有不同的实现。
class Cat(Animal):
def speak(self):
print("Meow!")
animals = [Dog(), Cat()]
for animal in animals:
animal.speak() # 输出: Woof! Meow!
8. 抽象类和方法(Abstract Class & Method)
抽象类是不能被实例化的类,必须由子类实现抽象方法。使用 abc
模块可以定义抽象类和抽象方法。
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def speak(self):
pass
class Dog(Animal):
def speak(self):
print("Woof!")
d = Dog()
d.speak() # 输出: Woof!
9. 类的魔术方法(Magic Methods)
Python 提供了一些特殊方法(魔术方法)用于定制对象的行为。这些方法通常是以双下划线开头和结尾的。
__init__(self)
:构造方法,初始化对象。__str__(self)
:定义对象的字符串表示。__repr__(self)
:返回对象的正式字符串表示。__add__(self, other)
:定义加法运算符的行为。__len__(self)
:定义len()
函数的行为。
例如:
class Person:
def __init__(self, name, age):
self.name = name