微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何简洁地列出类和对象的所有属性?

如何解决如何简洁地列出类和对象的所有属性?

我已经开始在python中创建类和对象,进度很慢,但是我到了那里。 我想问社区是否可以输出类/对象的所有属性

我创建了以下课程:-

import inspect

class Helloclass:

    def __init__(self):
        self.A = ""
        self.B = ""
        self.C = ""
        self.D = ""

london = Helloclass()
london.A = "Apples"
london.D = 120

print(inspect.getmembers(london))
  • 我从Helloclass创建了一个名为london的对象(因此londonHelloclass的实例)。
  • 我在类中编码了4个属性,分别是ABCD
  • 我已将字符串'Apples'分配给A对象的london属性
  • 我已将120的值分配给A对象的london属性
  • 我想打印出london对象或Helloclass类的所有可用属性
  • 我已经使用了inspect模块,但是这给了我一个可怕的输出,看起来像:-
  ('A','Apples'),('B',''),('C',('D',120),('__class__',<class '__main__.Helloclass'>),('__delattr__',<method-wrapper '__delattr__' of Helloclass object at 0x000001E6B704CD00>),('__dict__',{'A': 'Apples','B': '','C': '','D': 120}),('__dir__',<built-in method __dir__ of
  Helloclass object at 0x000001E6B704CD00>),('__doc__',None),('__eq__',<method-wrapper '__eq__' of
  Helloclass object at 0x000001E6B704CD00>),('__format__',<built-in method __format__ of Helloclass
  object at 0x000001E6B704CD00>),('__ge__',<method-wrapper '__ge__' of Helloclass object at
  0x000001E6B704CD00>),('__getattribute__',<method-wrapper '__getattribute__' of Helloclass object at
  0x000001E6B704CD00>),('__gt__',<method-wrapper '__gt__' of Helloclass object at
  0x000001E6B704CD00>),('__hash__',<method-wrapper '__hash__' of Helloclass object at
  0x000001E6B704CD00>),('__init__',<bound method Helloclass.__init__ of <__main__.Helloclass object
  at 0x000001E6B704CD00>>),('__init_subclass__',<built-in method __init_subclass__ of type object at
  0x000001E6B57CF350>),('__le__',<method-wrapper '__le__' of Helloclass object at
  0x000001E6B704CD00>),('__lt__',<method-wrapper '__lt__' of Helloclass object at
  0x000001E6B704CD00>),('__module__','__main__'),('__ne__',<method-wrapper '__ne__' of Helloclass
  object at 0x000001E6B704CD00>),('__new__',<built-in method __new__ of type object at
  0x00007FFF9F7DCB50>),('__reduce__',<built-in method __reduce__ of Helloclass object at
  0x000001E6B704CD00>),('__reduce_ex__',<built-in method __reduce_ex__ of Helloclass object at
  0x000001E6B704CD00>),('__repr__',<method-wrapper '__repr__' of Helloclass object at
  0x000001E6B704CD00>),('__setattr__',<method-wrapper '__setattr__' of Helloclass object at
  0x000001E6B704CD00>),('__sizeof__',<built-in method __sizeof__ of Helloclass object at
  0x000001E6B704CD00>),('__str__',<method-wrapper '__str__' of Helloclass object at
  0x000001E6B704CD00>),('__subclasshook__',<built-in method __subclasshook__ of type object at
  0x000001E6B57CF350>),('__weakref__',None)

尽管这给了我我想要的东西,但还有很多我不需要或不想看到的东西。

我只希望输出为:-

london Object of Class Helloclass
london.A = "Apples"
london.B = ""
london.C = ""
london.D = 120

有没有办法获得更清洁的输出

解决方法

您可以使用vars获得这种输出

>>> vars(london)
{'A': 'Apples','B': '','C': '','D': 120}
,

您可以简单地做到这两者。

import inspect
 
class Helloclass:
     
    def __init__(self):
        self.A = ""
        self.B = ""
        self.C = ""
        self.D = ""
        
    def __str__(self):
        return  str(self.__class__) + '\n' + '\n'.join((str(item) + ' = ' + str(self.__dict__[item]) for item in sorted(self.__dict__)))
 
london = Helloclass()
london.A = "Apples"
london.D = 120

print(london)

应该产生一些接近的东西

<class '__main__.Helloclass'>                                                                                                        
A = Apples                                                                                                                           
B =                                                                                                                                  
C =                                                                                                                                  
D = 120   

您还可以使用self。课程名称,并根据需要更改字符串。

 def __str__(self):
        return  'Object of Class '+str(self.__class__.__name__ ) + '\n' + '\n'.join((str(item) + ' = ' + str(self.__dict__[item]) for item in sorted(self.__dict__)))

应该更近一些。

Object of Class Helloclass                                                                                                           
A = Apples                                                                                                                           
B =                                                                                                                                  
C =                                                                                                                                  
D = 120  


                                                                                                                       
      

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。