[python] 객체의 속성 나열

클래스의 인스턴스에 존재하는 속성 목록을 얻는 방법이 있습니까?

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”이 출력되는 것입니다. 스크립트의 여러 부분에서 현재 속성을보고 싶습니다.



답변

>>> 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가 도움 이 될 수도 있습니다.


답변

dir(instance)
# or (same value)
instance.__dir__()
# or
instance.__dict__

그런 다음로 어떤 유형이 있는지 type()또는로 메소드 인지 테스트 할 수 있습니다 callable().


답변

vars(obj) 객체의 속성을 반환합니다.


답변

이전의 모든 답변이 정확합니다. 자신의 질문에 대한 세 가지 옵션이 있습니다

  1. dir()

  2. vars()

  3. __dict__

>>> dir(a)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'multi', 'str']
>>> vars(a)
{'multi': 4, 'str': '2'}
>>> a.__dict__
{'multi': 4, 'str': '2'}


답변

>>> ', '.join(i for i in dir(a) if not i.startswith('__'))
'multi, str'

이것은 물론 클래스 정의의 모든 메소드 또는 속성을 인쇄합니다. 로 변경 i.startwith('__')하여 “비공개”방법을 제외 할 수 있습니다i.startwith('_')


답변

검사 모듈은 객체를 검사하는 쉬운 방법을 제공합니다 :

inspect 모듈은 모듈, 클래스, 메서드, 함수, 트레이스 백, 프레임 객체 및 코드 객체와 같은 라이브 객체에 대한 정보를 얻는 데 도움이되는 몇 가지 유용한 함수를 제공합니다.


를 사용 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첫 번째 사람은 단순히 캐릭터 (이름)이다.

주제 : 클래스 이름으로 CamelCase 를 사용하십시오 .


답변

dir(your_object)속성 getattr(your_object, your_object_attr)을 얻고 값을 얻는 데 사용할 수 있습니다

사용법 :

for att in dir(your_object):
    print (att, getattr(your_object,att))

객체에 __dict__가없는 경우 특히 유용합니다. 그렇지 않은 경우 var (your_object) 시도해 볼 수도 있습니다