在体验NiceGU的过程中我看到了不同应用技术的想通思想
这两天在查看nicegui框架的一些代码的时候看到了一个类
from dataclasses import dataclass, field
最开始我以为是nicegui导入的,不过查了一下实则这个是pyton官方提供的标准库为了实验我在IDLE中执行了这个代码import语句是正确的。

那么这个dataclass是做什么的呢
回到Python的最初问题,如何定义一个类

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


不同的学生对象是不有不的名字的,如何体现这个不同呢?
给学生增一个姓名,年龄属性
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的一个用途还有其他的许多用法

留下一下问题下面这段代码的作用
@dataclass
class C:
mylist: list[int] = field(default_factory=list)
c = C()
c.mylist += [1, 2, 3]
甚至你可以动态创建class
图中的两段代码效果是一样的创建了一个类C,这种魔法比Java还直接。

© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END













暂无评论内容