如何使用 attrs python 包调用默认方法
How to invoke default methods with attrs python package
全部,
感谢您抽出宝贵时间尝试解决我的问题。我的问题与名为 attrs
(https://www.attrs.org/en/stable/) 的特定 Python 包有关。我刚刚开始使用它并尝试在 Github 页面上提出相同的问题,但被要求将我的问题重定向到此处。
我正在寻找描述在使用 attrs
定义 classes 时如何调用默认方法的示例的文档。这是我想要做的事情的一个例子:
不使用属性
class Calculator:
def __init__(self, var_1: float, var_2: float):
""" Class initialization method
:var_1: A positive integer
:var_2: Another positive integer
"""
self.var_1 = var_1
self.var_2 = var_2
self.sum = None
# Invoke default method
self.set_sum()
def get_sum():
self.var_1 + self.var_2
def set_sum():
self.sum = self.get_sum()
使用属性
from attrs import define, validators
from typing import Union
@define
class Calculator:
var_1: float = field(validator=[validators.instance_of(float), validators.ge(0.))
var_2: float = field(validator=[validators.instance_of(float), validators.ge(0.))
sum: Union[float, None] = field(default=None, init=False)
def get_sum():
self.var_1 + self.var_2
def set_sum():
self.sum = self.get_sum()
如果我知道对于计算器 class 的每个实例,我希望设置总和,我通常希望在我的 __init__
方法定义中调用该方法。有人可以阐明我如何使用 attrs
做到这一点吗
我认为您正在寻找 __attrs_post_init__()
(https://www.attrs.org/en/stable/examples.html?highlight=post_init#other-goodies)。
根据文档,它处理的用例是“您想让 class 的 __init__
方法做的不仅仅是为您完成的初始化、验证等使用 @define
."
时自动
文档显示了以下示例:
@define
class C:
x: int
y: int
z: int = field(init=False)
def __attrs_post_init__(self):
self.z = self.x + self.y
obj = C(x=1, y=2)
在运行这段代码之后,obj
会被初始化为C(x=1, y=2, z=3)
。请注意,z=3
被设置为 x
和 y
.
的总和
实际上,您的 .__attrs_post_init__()
方法将在生成的 .__init__()
方法结束时自动调用。
全部,
感谢您抽出宝贵时间尝试解决我的问题。我的问题与名为 attrs
(https://www.attrs.org/en/stable/) 的特定 Python 包有关。我刚刚开始使用它并尝试在 Github 页面上提出相同的问题,但被要求将我的问题重定向到此处。
我正在寻找描述在使用 attrs
定义 classes 时如何调用默认方法的示例的文档。这是我想要做的事情的一个例子:
不使用属性
class Calculator:
def __init__(self, var_1: float, var_2: float):
""" Class initialization method
:var_1: A positive integer
:var_2: Another positive integer
"""
self.var_1 = var_1
self.var_2 = var_2
self.sum = None
# Invoke default method
self.set_sum()
def get_sum():
self.var_1 + self.var_2
def set_sum():
self.sum = self.get_sum()
使用属性
from attrs import define, validators
from typing import Union
@define
class Calculator:
var_1: float = field(validator=[validators.instance_of(float), validators.ge(0.))
var_2: float = field(validator=[validators.instance_of(float), validators.ge(0.))
sum: Union[float, None] = field(default=None, init=False)
def get_sum():
self.var_1 + self.var_2
def set_sum():
self.sum = self.get_sum()
如果我知道对于计算器 class 的每个实例,我希望设置总和,我通常希望在我的 __init__
方法定义中调用该方法。有人可以阐明我如何使用 attrs
我认为您正在寻找 __attrs_post_init__()
(https://www.attrs.org/en/stable/examples.html?highlight=post_init#other-goodies)。
根据文档,它处理的用例是“您想让 class 的 __init__
方法做的不仅仅是为您完成的初始化、验证等使用 @define
."
文档显示了以下示例:
@define
class C:
x: int
y: int
z: int = field(init=False)
def __attrs_post_init__(self):
self.z = self.x + self.y
obj = C(x=1, y=2)
在运行这段代码之后,obj
会被初始化为C(x=1, y=2, z=3)
。请注意,z=3
被设置为 x
和 y
.
实际上,您的 .__attrs_post_init__()
方法将在生成的 .__init__()
方法结束时自动调用。