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

@dataclass
class 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__() 方法,使得可以在数据类中使用 setfrozenset 等集合类型。
支持可变属性的设置,可以使用 mutablefrozen 选项来控制属性是否可变。
因此,如果要定义一个只包含数据的类,那么使用 @dataclass 会更加方便和简洁。如果需要定义一些复杂的行为和方法,则需要使用普通的 class 来定义。

已发布

分类

来自

标签:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注