gpt4 book ai didi

python - 是否可以将 class.__init__() 的所有输入都作为一行中的属性?

转载 作者:行者123 更新时间:2023-12-02 03:13:12 24 4
gpt4 key购买 nike

我见过的大多数 Python 类看起来像这样(来自教程):

class Person:

def __init__(self, name, surname, birthdate, address, telephone, email):
self.name = name
self.surname = surname
self.birthdate = birthdate

self.address = address
self.telephone = telephone
self.email = email

有没有一种方法可以将 init 的所有输入都作为属性,而无需一次一行地输入它们?

这不仅用于数据存储,而且我在该类中还有其他方法。

我喜欢这样做:

class A:
def __init__(self, name, surname, birthdate, address, telephone, email):
for name, value in kwargs.items():
setattr(self, name, value)

因此无法使用任何随机变量启动该类,但我不会为每个项目键入 self.item = item

最佳答案

对于位置参数你可以做类似的事情

class A:
def __init__(self, *args):
names = ('attr_name_1', 'attr_name_2', ..., 'attr_name_n')
for name, value in zip(names, args):
setattr(self, name, value)

如果您想确保获得所需的值数量,您可以检查 len(args) == len(names)

关键字参数就是

class A:
def __init__(self, **kwargs):
for name, value in kwargs.items():
setattr(self, name, value)

同样,如果你想检查参数是否是你期望的参数,你可以将预期的键存储在一个集合中(比如 names)并检查 names == set(kwargs.键())

无论如何,如果您想使用您的类来基本存储该数据,您可以使用dataclasses。摘自Python3.7官方文档:

@dataclass
class InventoryItem:
'''Class for keeping track of an item in inventory.'''
name: str
unit_price: float
quantity_on_hand: int = 0

def total_cost(self) -> float:
return self.unit_price * self.quantity_on_hand

请注意,对于较早的 Python 版本,dataclasses 不是 Python 标准库的一部分,但可以作为常规包安装(例如 pip install dataclasses)

关于python - 是否可以将 class.__init__() 的所有输入都作为一行中的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56979052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com