为了账号安全,请及时绑定邮箱和手机立即绑定

列出对象的属性

列出对象的属性

浮云间 2019-12-09 13:58:26
有没有办法获取类实例上存在的属性的列表?class new_class():    def __init__(self, number):        self.multi = int(number) * 2        self.str = str(number)a = new_class(2)print(', '.join(a.SOMETHING))期望的结果是将输出“ multi,str”。我希望它可以查看脚本各个部分的当前属性。
查看完整描述

3 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

>>> class new_class():

...   def __init__(self, number):

...     self.multi = int(number) * 2

...     self.str = str(number)

... 

>>> a = new_class(2)

>>> a.__dict__

{'multi': 4, 'str': '2'}

>>> a.__dict__.keys()

dict_keys(['multi', 'str'])

您可能还会发现pprint有帮助。


查看完整回答
反对 回复 2019-12-09
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

dir(instance)

# or (same value)

instance.__dir__()

# or

instance.__dict__

然后,您可以测试的类型type()或的方法callable()。


查看完整回答
反对 回复 2019-12-09
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

该检查模块提供了简便的方法来检查的对象:


检查模块提供了几个有用的功能,以帮助获取有关活动对象的信息,例如模块,类,方法,函数,回溯,框架对象和代码对象。


使用,getmembers()您可以查看类的所有属性及其值。要排除私有或受保护的属性,请使用.startswith('_')。要排除方法或功能,请使用inspect.ismethod()或inspect.isfunction()。


import inspect



class NewClass(object):

    def __init__(self, number):

        self.multi = int(number) * 2

        self.str = str(number)


    def func_1(self):

        pass



a = NewClass(2)


for i in inspect.getmembers(a):

    # Ignores anything starting with underscore 

    # (that is, private and protected attributes)

    if not i[0].startswith('_'):

        # Ignores methods

        if not inspect.ismethod(i[1]):

            print(i)

请注意,由于第一个ismethod()元素i只是一个字符串(其名称),因此在的第二个元素上使用。


查看完整回答
反对 回复 2019-12-09
  • 3 回答
  • 0 关注
  • 353 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信