深度学习pytorch之@dataclass
为了解释Dataclass,我们可以自己实现一个类,然后通过@dataclass装饰器来实现同样的功能,这个类能够存储一个数字,拥有比大小的功能
#普通的类,返回值的大小
class Number:
def __init__(self,val):
self.val=val
one=Number(1)
print(one)#返回的是对象 #<__main__.Number object at 0x0000022DF7BDD8D0>
print(one.val)# 1
#通过__repr__可以直接拿到值
class Number:
def __init__(self,val):
self.val=val
def __repr__(self):
return str(self.val)
one=Number(1)
print(one) #1
#实现比较大小
class Number:
def __init__(self,number):
self.number=number
def __repr__(self):
return str(self.number)
def __eq__(self, other):
return self.number==other
def __lt__(self, other):
return self.number<other
one=Number(1)
two=Number(2)
result=one.__eq__(two)
print(result) #False
from dataclasses import dataclass
#装饰器
@dataclass
class Number:
#初始化为0
val:int=0
one=Number(1)
two=Number(2)
print(one)# Number(val=1)
print(one.val)# 1
#虽然我们自己没有实现__eq__函数,但是依然能够调用
print(one.__eq__(two))# False
通过上面,很明显使用dataclass装饰器,很大程度上减少了代码量,很方便。除了上面的整型外,还可以使用其他的类型,包括自己定义的数据类型。
from typing import List, Any
class MultiChoiceExample:
guid: Any = None
context: str = None
answers: List[str] = None
labels: int = None