我有一个用于边界框坐标的类,我想将其转换为dataclass,但我无法像在普通类中一样,使用类方法设置属性。这是普通班:
class BBoxCoords:
"""Class for bounding box coordinates"""
def __init__(self, top_left_x: float, top_left_y: float, bottom_right_x: float, bottom_right_y: float):
self.top_left_x = top_left_x
self.top_left_y = top_left_y
self.bottom_right_x = bottom_right_x
self.bottom_right_y = bottom_right_y
self.height = self.get_height()
def get_height(self) -> float:
return self.bottom_right_y - self.top_left_y
下面是我想要它做的:
bb = BBoxCoords(1, 1, 5, 5)
bb.height
> 4
这正是我想要的。我试着用数据类做同样的事情
from dataclasses import dataclass
@dataclass
class BBoxCoords:
"""Class for bounding box coordinates"""
top_left_x: float
top_left_y: float
bottom_right_x: float
bottom_right_y: float
height = self.get_height()
def get_height(self) -> float:
return self.bottom_right_y - self.top_left_y
但是self
在我尝试使用它时没有定义,所以我得到了一个NameError。使用数据类执行此操作的正确方法是什么?我知道我能做到
bb = BBoxCoords(1, 1, 5, 5)
bb.get_height()
> 4
但是我宁愿调用属性而不是方法
对于这类事情,您需要
__post_init__
,它将在__init__
之后运行。另外,请确保在__init__
中未设置height
,以便:在行动中:
相关问题 更多 >
编程相关推荐