Python高级语法知识点---类的继承、异步编程、类型注解、装饰器

Python高级语法知识点

1. 类和继承

基本概念
  • :类是创建对象的蓝图。它定义了一组属性和方法,这些属性和方法描述了对象的行为和状态。
  • 继承:继承允许一个类(子类)继承另一个类(父类)的属性和方法。这有助于代码重用和组织。
示例
# 父类
class BaseLLM:
    def __init__(self, model_name: str):
        self.model_name = model_name

    def generate(self, prompt: str) -> str:
        raise NotImplementedError("This method should be implemented by subclasses")

# 子类
class BaseOpenAI(BaseLLM):
    def __init__(self, model_name: str, api_key: str):
        super().__init__(model_name)
        self.api_key = api_key

    def generate(self, prompt: str) -> str:
        # 模拟调用API
        return f"Generated text from {self.model_name} with prompt: {prompt}"

# 使用
openai_model = BaseOpenAI(model_name="gpt-3.5-turbo", api_key="your_api_key")
print(openai_model.generate("Hello, world!"))

2. 数据验证和配置管理

基本概念
  • Pydantic:Pydantic 是一个用于数据验证和配置管理的库,可以确保传入的数据符合预期的结构和类型。
  • FieldField 用于定义类属性的默认值、别名和排除选项。
  • root_validatorroot_validator 是一个类方法装饰器,用于在对象实例化时对整个对象进行验证和处理。
示例
from pydantic import BaseModel, Field, root_validator
from typing import Optional

class BaseLLM(BaseModel):
    model_name: str
    api_key: Optional[str] = Field(None, alias="api_key")

    @root_validator(pre=True)
    def build_extra(cls, values: dict) -> dict:
        if "api_key" not in values and "OPENAI_API_KEY" in os.environ:
            values["api_key"] = os.environ["OPENAI_API_KEY"]
        return values

# 使用
data = {"model_name": "gpt-3.5-turbo"}
llm = BaseLLM(**data)
print(llm.model_name, llm.api_key)

3. 异步编程

基本概念
  • AsyncIO:AsyncIO 是 Python 标准库中的一个模块,用于编写并发代码,使用协程、任务和事件循环。
  • async 和 awaitasync 关键字用于定义协程函数,await 关键字用于等待协程函数的结果。
  • AsyncIterator:异步迭代器允许在异步上下文中逐块处理数据。
示例
import asyncio

async def fetch_data(url: str) -> str:
    # 模拟异步网络请求
    await asyncio.sleep(1)
    return f"Data from {url}"

async def main():
    urls = ["http://example.com", "http://example.org"]
    tasks = [fetch_data(url) for url in urls]
    results = await asyncio.gather(*tasks)
    for result in results:
        print(result)

# 运行
asyncio.run(main())

4. 类型注解

基本概念
  • Type Annotations:类型注解用于指定函数参数和返回值的类型,有助于提高代码的可读性和维护性。
  • Union 和 LiteralUnion 用于定义多个可能的类型,Literal 用于定义具体的字面量值。
示例
from typing import List, Optional, Union, Literal

def process_data(data: Union[int, float], action: Literal["add", "subtract"]) -> float:
    if action == "add":
        return data + 10.0
    elif action == "subtract":
        return data - 10.0
    else:
        raise ValueError("Invalid action")

# 使用
print(process_data(5, "add"))  # 输出: 15.0
print(process_data(15.0, "subtract"))  # 输出: 5.0

5. 装饰器

基本概念
  • @property@property 装饰器用于定义只读属性或计算属性。
  • @root_validator@root_validator 是 Pydantic 提供的一个装饰器,用于在对象实例化时对整个对象进行验证和处理。
示例
class Circle:
    def __init__(self, radius: float):
        self._radius = radius

    @property
    def radius(self) -> float:
        return self._radius

    @property
    def area(self) -> float:
        return 3.14159 * self._radius ** 2

# 使用
circle = Circle(5)
print(circle.radius)  # 输出: 5
print(circle.area)  # 输出: 78.53975

6. 日志记录

基本概念
  • logginglogging 模块用于记录调试信息和错误信息,帮助调试和监控应用程序。
示例
import logging

# 配置日志记录
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

# 记录日志
logging.debug("This is a debug message")
logging.info("This is an info message")
logging.warning("This is a warning message")
logging.error("This is an error message")
logging.critical("This is a critical message")

7. 环境变量和配置管理

基本概念
  • os.getenvos.getenv 用于从环境变量中获取配置值。
  • get_from_dict_or_env:自定义函数,用于从字典或环境变量中获取配置值。
示例
import os

def get_from_dict_or_env(config: dict, key: str, env_var: str) -> str:
    value = config.get(key) or os.getenv(env_var)
    if not value:
        raise ValueError(f"Missing required configuration: {key}")
    return value

# 使用
config = {"api_key": "your_api_key"}
api_key = get_from_dict_or_env(config, "api_key", "OPENAI_API_KEY")
print(api_key)

8. 错误处理

基本概念
  • try-excepttry-except 语句用于捕获和处理异常,确保程序在出现错误时能够继续运行。
示例
def divide(a: float, b: float) -> float:
    try:
        result = a / b
    except ZeroDivisionError:
        logging.error("Division by zero is not allowed")
        return None
    return result

# 使用
print(divide(10, 2))  # 输出: 5.0
print(divide(10, 0))  # 输出: None 并记录错误日志
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值