Python 面向对象编程(OOP,Object-Oriented Programming) 通过 类(Class) 和 对象(Object) 来组织代码,提高代码的封装性、复用性和可维护性。
1. 类与对象
1.1 定义类和创建对象
class Person:
def __init__(self, name, age): # 构造方法
self.name = name # 实例属性
self.age = age
def introduce(self): # 实例方法
print(f"我叫 {self.name},今年 {self.age} 岁。")
# 创建对象
p1 = Person("Alice", 25)
p1.introduce()
输出:
我叫 Alice,今年 25 岁。
2. 类的属性和方法
2.1 实例属性与方法
- 实例属性:在
__init__()
方法中定义,属于对象 - 实例方法:必须有
self
参数,操作实例数据
class Dog:
def __init__(self, name):
self.name = name
def bark(self):
print(f"{self.name}:汪汪!")
dog = Dog("Buddy")
dog.bark()
2.2 类属性与类方法
- 类属性:属于整个类,所有对象共享
- 类方法:使用
@classmethod
修饰,操作类属性
class Animal:
species = "动物" # 类属性
@classmethod
def get_species(cls):
return cls.species
print(Animal.get_species()) # 输出 "动物"
2.3 静态方法
- 静态方法:不依赖实例或类,使用
@staticmethod
修饰
class Math:
@staticmethod
def add(a, b):
return a + b
print(Math.add(3, 5)) # 输出 8
3. 面向对象特性
3.1 封装(Encapsulation)
- 将数据和方法封装到类中,通过 访问控制 保护数据
class BankAccount:
def __init__(self, balance):
self.__balance = balance # 私有属性
def deposit(self, amount):
if amount > 0:
self.__balance += amount
return self.__balance
def get_balance(self):
return self.__balance
account = BankAccount(100)
print(account.get_balance()) # 100
注意:
self.__balance
前有 双下划线,Python 会对其进行名称改写,防止外部直接访问。
3.2 继承(Inheritance)
- 允许子类 继承 父类的属性和方法,支持 方法重写
class Animal:
def make_sound(self):
print("动物叫声")
class Dog(Animal):
def make_sound(self): # 重写方法
print("狗:汪汪!")
dog = Dog()
dog.make_sound() # 输出 "狗:汪汪!"
3.3 多态(Polymorphism)
- 相同方法 在不同类中表现不同
class Cat:
def make_sound(self):
print("猫:喵喵!")
class Dog:
def make_sound(self):
print("狗:汪汪!")
animals = [Cat(), Dog()]
for animal in animals:
animal.make_sound()
输出:
猫:喵喵!
狗:汪汪!
4. 特殊方法(魔法方法)
Python 允许自定义 特殊方法(Magic Methods),用于定义对象的行为,如 运算符重载。
4.1 __str__()
方法
用于 print()
输出对象时的字符串表示。
class Person:
def __init__(self, name):
self.name = name
def __str__(self):
return f"Person({self.name})"
p = Person("Alice")
print(p) # 输出 "Person(Alice)"
4.2 __add__()
运算符重载
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other): # + 号重载
return Vector(self.x + other.x, self.y + other.y)
def __str__(self):
return f"({self.x}, {self.y})"
v1 = Vector(1, 2)
v2 = Vector(3, 4)
print(v1 + v2) # 输出 "(4, 6)"
5. 抽象类(Abstract Class)
- 抽象类:不能直接实例化,必须由子类实现
@abstractmethod
方法 - 使用
abc
模块 定义抽象类
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
c = Circle(5)
print(c.area()) # 输出 78.5
6. 参考资料
出站链接
站内链接
Python 的 OOP 使代码更易维护和扩展,建议在开发大型项目时使用!🚀
发表回复