클래스의 인스턴스에 존재하는 속성 목록을 얻는 방법이 있습니까?
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)
객체의 속성을 반환합니다.
답변
이전의 모든 답변이 정확합니다. 자신의 질문에 대한 세 가지 옵션이 있습니다
>>> 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) 시도해 볼 수도 있습니다