阅读NiceGui 代码学习dataclass联想到的内容

在体验NiceGU的过程中我看到了不同应用技术的想通思想

这两天在查看nicegui框架的一些代码的时候看到了一个类

from dataclasses import dataclass, field

最开始我以为是nicegui导入的,不过查了一下实则这个是pyton官方提供的标准库为了实验我在IDLE中执行了这个代码import语句是正确的。

阅读NiceGui 代码学习dataclass联想到的内容

那么这个dataclass是做什么的呢

回到Python的最初问题,如何定义一个类

阅读NiceGui 代码学习dataclass联想到的内容

 class Student:
          pass

如何表明某个具体的学生jack呢,看下面的偌 jack = Student()tom=Studnet()是两个不同的学生

阅读NiceGui 代码学习dataclass联想到的内容

阅读NiceGui 代码学习dataclass联想到的内容

不同的学生对象是不有不的名字的,如何体现这个不同呢?

给学生增一个姓名,年龄属性


 
class Student:
    # name:str
    # age:int
    def __init__(self,name,age):
        self.name = name
        self.age = age
        #
    def show(self):
         print(self.name,self.age)

tomc = Student("tom",11)
jack = Student("jack",23)

tomc.show()
jack.show()

问题来了,这个name,age的初始化都需要在__int___这个无趣的函数中进行赋值

有没有简单的办法是有的,使用 @dataclass来装饰一个类

这样就不需要写繁琐的__init__方法了


@dataclass
class Student:
    name:str
     age:int
 
 
    def show(self):
         print(self.name,self.age)


tomc = Student("tom",11)
jack = Student("jack",23)

tomc.show()
jack.show()

当然这只是dataclass的一个用途还有其他的许多用法

阅读NiceGui 代码学习dataclass联想到的内容

留下一下问题下面这段代码的作用

@dataclass
class C:
    mylist: list[int] = field(default_factory=list)

c = C()
c.mylist += [1, 2, 3]

甚至你可以动态创建class

图中的两段代码效果是一样的创建了一个类C,这种魔法比Java还直接。

阅读NiceGui 代码学习dataclass联想到的内容

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容