Solowang 发表于 2024-11-15 16:14

开启极简面向对象模式

本帖最后由 Solowang 于 2024-11-15 16:28 编辑

dataclasses它提供了一个装饰器和一些函数,用于自动为用户定义的数据类生成特殊方法。数据类主要用于存储数据,就像普通的类一样,但它通过简洁的语法减少了样板代码的数量。
前后对比:# 没有使用dataclasses之前
class Person:      
      def __init__(self, name, age):      
      self.name = name         
      self.age = age      
# 使用dataclasses之后
from dataclasses import dataclass
@dataclass   
class Person:      
      name: str      
      age: int

使用注解dataclass放在类名称上面 可以不在类中写init方法 直接调用类可直接初始化
from dataclasses import dataclass

@dataclass
class Friend():
    name: str
    age: int
    height: int = 175
    weight: int = 50
   
if __name__ == '__main__':
    # friend= Friend().from_dict(name="张三",age=12)
    # print(friend)
    a = Friend("zhangsan", 12)
    print(a.__str__())








dataclass中的一些函数方法
from dataclasses import dataclass, asdict, astuple, replace

# dataclass, asdict, astuple, replace
@dataclass
class Friend():
    name: str
    age: int
    height: int = 175
    weight: int = 50

    @classmethod
    def from_dict(cls, d):
      """
      desc: 字典转换成类对象
      :param d: dict_type
      :return: object_type
      """
      return Friend(**d)

    def to_dict(self):
      """
      desc: 对象转字典
      :return: dict_type
      """
      return asdict(self)

    def to_tuple(self):
      """
      desc: 对象转元组
      :return: tuple_type
      """
      return astuple(self)

    def to_replace(self,chage_data):
      """
      desc: 内容替换
      :return: object_type
      """
      return replace(self,**chage_data)



if __name__ == '__main__':
    # 注: 可变参数**args传入参数是字段类型{a:b}
    friend = Friend.from_dict({"name": "zhangsan", "age": 12})
    print("字典转对象:",friend)
    friend_dict=friend.to_dict()
    print("对象转字典",friend_dict)
    friend_tuple=friend.to_tuple()
    print("对象转元组",friend_tuple)
    friend_replace=friend.to_replace({"name":"lisi","age":12})
    print(friend_replace)


页: [1]
查看完整版本: 开启极简面向对象模式