吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 454|回复: 0
收起左侧

[讨论] 开启极简面向对象模式

[复制链接]
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方法 直接调用类可直接初始化
[Python] 纯文本查看 复制代码
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中的一些函数方法

[Python] 纯文本查看 复制代码
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)


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 11:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表