如何在python中打印类成员的数据?

时间:2019-06-17 10:11:47

标签: python python-3.x class

我有

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

3 个答案:

答案 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': ''}