提问人:Triceratops 提问时间:12/21/2022 最后编辑:Triceratops 更新时间:12/21/2022 访问量:59
在 Python 中使用自定义参数列表进行类 init,如果未显式传递参数,请设置默认值
Class init in Python with custom list of parameters, set default if parameters is not explicitly passed
问:
我想在 Python 3.9 中定义一个类,该类将字典或参数列表作为参数获取,并在以下事项中设置类属性:
- 如果在参数中传递了键名,则它使用它来设置相应的类属性。
- 如果未传递键名,则使用默认值设置类属性。
一种方法是:
class example():
def __init__(self, x=None, y=None):
if x is None:
self.x = "default_x"
else:
self.x = x
if y is None:
self.y = "default_y"
else:
self.y = y
或很快(感谢 Matszwecja):
class example():
def __init__(self, x="default_x", y="default_y"):
self.x = x
self.y = y
有没有一种更 Python 的方法可以在不对每个参数进行硬编码的情况下做到这一点?我想要一些灵活性,这样如果我将来添加另一个属性,我就不需要为另一个属性进行硬编码。if
我想声明一个类
class example():
def __init__(kwargs):
?
比如如果我通过它就会生成example(y="some", z=1, w=2)
self.x = "default_x"
self.y = "some"
self.z = 1
self.w = 2
答:
1赞
matszwecja
12/21/2022
#1
class example():
def __init__(self, x="default_x", y="default_y"):
self.x = x
self.y = y
0赞
chepner
#2
请考虑使用数据类为您生成样板方法。__init__
from dataclasses import dataclass
@dataclass
class Example:
x: str = "default_x"
y: str = "default_y"
如果需要提供可变的默认值(例如,如果没有提供显式列表,则为新的空列表),则可以使用显式创建具有默认工厂的字段;装饰器使用该对象为 instance 属性生成必要的代码。dataclasses.field
dataclass
Field
from dataclasses import dataclass, field
@dataclass
class Example:
x: str = "default_x"
# Bad!
# y: list[str] = []
y: list[str] = field(default_factory=list) # Good
评论
x = 'default_x'
而不是?从字面上看,这就是默认的用途。x=None
None
self.x