我见过的大多数 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/