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