问题描述
创建数据类对象时,我可以使用kwargs
,而不会出现问题:
@dataclass()
class Data:
name: str = 'Unnamed'
additional: int = None
things: int = None
dic = {'additional': 123,'things': 456}
res = Data(name='Somename',**dic)
Output: Data(name='Somename',additional=123,things=456)
但是,当它们不属于调用参数时,我想将kwargs
拆包到数据类中:
@dataclass()
class Data:
name: str = 'Unnamed'
additional: int = None
things: int = None
def __post_init__(self):
self(**dic) #unpack kwargs to fields
dic = {'additional': 123,'things': 456}
res = Data(name='Somename')
解决方法
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// Create scanner object and set scanner variables
Scanner inp = new Scanner(System.in);
System.out.println("Press any key to start");
String key = inp.nextLine();
System.out.println("\nEnter the amount of each item");
System.out.println("Upto 5 inputs are allowed!\n");
int counter = 0;
int index = 0;
int index2 = 0;
Double[] numbers = new Double[5];
Double[] numbers2 = new Double[5];
boolean go = true;
while (go) {
String value = inp.nextLine();
value = value.toLowerCase();
// Set the index value to "h" or "H"
int indexOfh = value.indexOf('h');
boolean containsh = indexOfh == 0 || indexOfh == (value.length() - 1);
if (containsh) { // Validate h at beginning or end
numbers[index] = Double.parseDouble(value.replace("h",""));
index++;
System.out.println("HST will be taken account for this value");
} else {
numbers2[index2] = Double.parseDouble(value); // changed here
index2++; //added this line
}
counter++;
if (counter == 5) {
go = false;
}
}
System.out.println("\nHST Values:");
for (int i = 0; i < index; i++) { // changed here
// no need to do null check now
System.out.println(numbers[i]);
}
System.out.println("\nNon-HST Values:");
for (int x = 0; x < index2; x++) { // changed here
// no need to do null check now
System.out.println(numbers2[x]);
}
} }
可以显式定义dataclass
方法。
__init__()
的参数为:
dataclass()
:如果为true(默认设置),则会生成一个init
方法。如果该类已经定义了
__init__()
,则将忽略此参数。
因此,您可以定义标准的__init__()
方法来处理__init__()
。
kwargs
,
最后我得到了一个略有不同的解决方案,该解决方案实现了预期的目标:
dic = {'Somename': 123}
@dataclass()
class Data:
name: str = 'Unnamed'
additional: int = None
things: int = None
arg: int = None
def __post_init__(self):
self.arg = dic.get(self.name,None)
res = Data(name='Somename')
Data(name='Somename',additional=None,things=None,arg=123)