我有
class CanIdPropType:
def __init__(self):
self.arbitration_id = None
self.dlc = 0
self.data = {}
self.timestamp = ""
def Receive():
CanMessage = CanIdPropType()
print('CanMessage',CanMessage)
在上面的代码中,我试图打印'CanMessage',但它正在打印类的地址。我想在不使用以下格式的情况下打印类成员的值:
CanMessage.dlc, CanMessage.data
答案 0 :(得分:1)
您可以通过覆盖__repr__
方法来更改对象的默认方式。
例如:
class CanIdPropType:
def __init__(self):
self.arbitration_id = None
self.dlc = 0
self.data = {}
self.timestamp = ""
def __repr__(self):
return f"<CanIdPropType: {self.arbitration_id}, {self.dlc}>"
答案 1 :(得分:1)
您可以覆盖dunder方法__str__
以获得所需的格式。
您可以遍历__dict__
,这是一个字典,用于存储类的属性以获取所需的属性列表
class CanIdPropType:
def __init__(self):
self.arbitration_id = None
self.dlc = 0
self.data = {}
self.timestamp = ""
def __str__(self):
#Iterate over all attributes, and create the representative string
return ', '.join([f'{self.__class__.__name__}:{attr}' for attr in self.__dict__])
CanMessage = CanIdPropType()
print(CanMessage)
输出将为
CanIdPropType:arbitration_id, CanIdPropType:dlc, CanIdPropType:data, CanIdPropType:timestamp
答案 2 :(得分:0)
使用.__dict__
:
对于普通对象,__dict__
对象创建一个单独的dict对象,该对象存储属性,__getattribute__
首先尝试访问它并从那里获取属性(在尝试查找该属性之前在类中通过使用描述符协议并在调用__getattr__
之前)。类上的__dict__
描述符实现对该字典的访问。
class CanIdPropType:
def __init__(self):
self.arbitration_id = None
self.dlc = 0
self.data = {}
self.timestamp = ""
def Receive():
CanMessage = CanIdPropType()
print('CanMessage',CanMessage.__dict__)
Receive()
输出:
CanMessage {'arbitration_id': None, 'dlc': 0, 'data': {}, 'timestamp': ''}