VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • python OOP 面向对象编程实践

在 Python 中实现面向对象编程(OOP)可以通过原生语法结合现代工具提升代码质量。以下是分层总结:

一、Python OOP 基础特性
Python 原生支持以下 OOP 核心概念:

类与对象

class Animal:
    def __init__(self, name: str):
        self.name = name  # 封装属性
  
    def speak(self) -> str:
        raise NotImplementedError("子类必须实现此方法")

class Dog(Animal):  # 继承
    def speak(self) -> str:  # 多态
        return "Woof!"

特殊方法

init: 构造函数
str: 字符串表示
add: 运算符重载
访问控制

self.name: 公有属性
self._protected_var: 约定保护属性
self.__private_var: 名称修饰实现私有属性
二、标准库增强

  1. abc 模块 (Abstract Base Classes)
    强制子类实现接口,避免忘记覆盖方法:
from abc import ABC, abstractmethod

class Shape(ABC):
    @abstractmethod
    def area(self) -> float:
        pass

class Circle(Shape):
    def __init__(self, radius: float):
        self.radius = radius
  
    def area(self) -> float:  # 必须实现抽象方法
        return 3.14 * self.radius**2
  1. typing 模块
    静态类型注解,提升代码可读性和 IDE 支持:
from typing import List, Optional

class User:
    def __init__(self, name: str, emails: Optional[List[str]] = None):
        self.name = name
        self.emails = emails or []
  
    @classmethod
    def create_admin(cls) -> "User":
        return cls(name="Admin")

三、现代工具增强 - Pydantic
数据验证和设置管理的封装工具:

from pydantic import BaseModel, ValidationError, validator

class Employee(BaseModel):
    name: str
    age: int
    email: str

    @validator("age")
    def check_age(cls, value):
        if value < 18:
            raise ValueError("年龄必须 >= 18")
        return value

try:
    emp = Employee(name="John", age=17, email="john@example.com")
except ValidationError as e:
    print(e.json())

关键优势:

自动类型验证
数据序列化/反序列化(JSON/dict 转换)
自定义验证器
四、综合使用示例
结合所有工具的高可维护代码:

from abc import ABC, abstractmethod
from pydantic import BaseModel
from typing import List

# 抽象接口
class DatabaseConnector(ABC):
    @abstractmethod
    def connect(self) -> None:
        pass
  
    @abstractmethod
    def query(self, sql: str) -> List[dict]:
        pass

# 数据模型
class UserModel(BaseModel):
    id: int
    name: str
    is_active: bool = True  # 默认值

# MySQL 具体实现
class MySQLConnector(DatabaseConnector):
    def __init__(self, host: str, user: str):
        self.host = host
        self.user = user
        self._connection = None  # 私有属性
  
    def connect(self):
        self._connection = f"Connected to {self.host} as {self.user}"
  
    def query(self, sql: str) -> List[dict]:
        # 模拟查询
        return [{"id": 1, "name": "Alice"}]

# 使用示例
conn = MySQLConnector(host="localhost", user="admin")
conn.connect()
user_data = conn.query("SELECT * FROM users")
user = UserModel(**user_data[0])  # 自动校验数据结构

五、关键实践建议
优先组合而非继承:避免复杂的继承链
类型提示:始终为公开方法添加类型注解
利用数据类:Python 3.7+ 的 @dataclass 简化简单类
混合使用工具:
abc 定义接口契约
pydantic 处理数据校验
typing 明确参数和返回值类型
这些工具的组合使用可以显著提高代码的可维护性、可靠性和团队协作效率。

来源:https://www.cnblogs.com/julian-zhang/p/18777657


相关教程