Python_@property @dataclass
@property
class Slot_info: def __init__(self, slot: Slot_point, slot_error: Slot_state, slot_type: int): self.slot = slot self.slot_error = slot_error self.slot_type = slot_type
@property def get_slot(self) -> Slot_point: return self.slot
@property def get_slot_error(self) -> Slot_state: return self.slot_error
@property def get_type(self) -> int: return self.slot_type
def __str__(self) -> str: return f"Slot_info({self.slot}, {self.slot_error}, {self.slot_type})"
def __repr__(self) -> str: return self.__str__()Q: @property装饰器可否理解成C++中修饰方法的const
在一定程度上,可以将
@property装饰器理解为 C++ 中修饰方法的const,但二者之间也存在一些差异。
在 Python 中,@property装饰器用于将一个方法转换为只读属性,这意味着该属性只能被读取,而不能被修改。与 C++ 中const修饰方法类似,@property装饰器也是为了确保方法不会对实例的状态进行修改,从而保证代码的安全性和可靠性。
然而,与 C++ 中的const不同的是,@property装饰器并不是一个强制性的约束,因为 Python 是一种动态语言,可以在运行时修改对象的状态,而不需要使用@property装饰器。此外,@property装饰器也可以用来动态计算属性值,而 C++ 中的const则仅仅是禁止修改对象状态的一种机制。
@dataclass
@dataclassclass Slot_state: p1_visual: bool p2_visual: bool p3_visual: bool p4_visual: bool p1_x_error: float p1_y_error: float p2_x_error: float p2_y_error: float p1_error: float p2_error: float heading_14_error: float heading_23_error: float heading_md_error: float@dataclass和普通class的区别
在 Python 中,
@dataclass是一个装饰器,可以用于定义数据类,它可以自动为数据类生成一些常用的特殊方法,例如__init__(),__repr__()和__eq__()等,从而使代码更加简洁。
与普通的class相比,@dataclass的优点是:
省略了一些样板代码,如__init__(),__repr__(),__eq__()等方法,使代码更加简洁。
支持默认值和类型提示,可以在定义属性时直接指定类型和默认值,减少了手动类型转换的代码。
支持字段的默认值,可以在字段定义中设置默认值。
自动生成__hash__()方法,使得可以在数据类中使用set和frozenset等集合类型。
支持可变属性的设置,可以使用mutable或frozen选项来控制属性是否可变。
因此,如果要定义一个只包含数据的类,那么使用@dataclass会更加方便和简洁。如果需要定义一些复杂的行为和方法,则需要使用普通的class来定义。