programing

Python에서 모든 개체 속성을 가져오시겠습니까?

prostudy 2022. 3. 19. 12:48
반응형

Python에서 모든 개체 속성을 가져오시겠습니까?

Python에서 객체의 모든 속성/방법/필드/등등을 얻을 수 있는 방법이 있는가?

vars()내가 원하는 것에 가깝지만, 물체에 어떤 것이 있지 않는 한 그것은 작동하지 않는다.__dict__, 항상 진실인 것은 아니다(예를 들어, 그것은 a에 대한 사실이 아니다).listadict, 등).

기본 제공 기능을 사용하십시오.

나는 사용한다__dict__그리고dir(<instance>)

:

class MyObj(object):
  def __init__(self):
    self.name = 'Chuck Norris'
    self.phone = '+6661'

obj = MyObj()
print(obj.__dict__)
print(dir(obj))

# Output:  
# obj.__dict__ --> {'phone': '+6661', 'name': 'Chuck Norris'}
#
# dir(obj)     --> ['__class__', '__delattr__', '__dict__', '__doc__',
#               '__format__', '__getattribute__', '__hash__', 
#               '__init__', '__module__', '__new__', '__reduce__', 
#               '__reduce_ex__', '__repr__', '__setattr__', 
#               '__sizeof__', '__str__', '__subclasshook__', 
#               '__weakref__', 'name', 'phone']

당신이 아마 원하는 것은 입니다.

중요한 점은 클래스가 특수 프로그램을 재정의할 수 있다는 것이다.__dir__원인이 되는 방법dir()학급이 원하는 것을 반환하는 것(정확한 목록을 반환하도록 권장되지만, 이것은 시행되지 않는다).또한 일부 객체는 재정의하여 동적 특성을 구현할 수 있다.__getattr__는 RPC 프록시 개체일 수도 있고 C 확장 클래스의 인스턴스일 수도 있다.만약 당신의 목적이 이런 예들 중 하나라면, 그들은 아마__dict__ 또는 다음을 통해 포괄적인 속성 목록을 제공할 수 있음__dir__: 이러한 물체들 중 다수는 너무 많은 동적 특성을 가지고 있을 수 있다. 당신이 그것에 접근하기 전까지는 그것이 가지고 있는 것을 실제로 알지 못할 것이다.

단기적으로 보면.dir()충분치 않아, 당신은 넘나드는 함수를 쓸 수 있다.__dict__그렇다면, 어떤 대상을 위해__dict__의 모든 학급에서.obj.__class__.__mro__; 비록 이것은 일반적인 비단뱀 개체에만 효과가 있을 것이다.장기적으로, 여러분은 오리 타이핑 + 추측을 사용해야 할지도 모른다 - 만약 그것이 오리처럼 보이면, 손가락을 교차시키고, 그것이 가지고 있기를 바란다..feathers.

사용할 수 있다dir(your_object)속성이랑getattr(your_object, your_object_attr)가치를 얻다

사용법:

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

참조URL: https://stackoverflow.com/questions/6886493/get-all-object-attributes-in-python

반응형