다음 클래스의 인스턴스가 있다고 가정합니다.
class Foo(object):
def __init__(self, data):
self._data = data
foo = Foo({'bar': 'baz'})
당신이 dir(foo)
얻을 때 :
>>> dir(foo)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_data']
_data
속성 목록 끝에있는 참고
dir
내 클래스의 인스턴스에 대한 출력 을 사용자 정의하는 방법을 갖고 싶습니다 . 이 특정 경우에는 _data
사전 에 키-값 쌍을 추가하여 다음과 같이 이전 출력에 추가 항목으로 나열하고 싶습니다.
>>> dir(foo)
['__class__', '__delattr__', ..., '_data', 'bar']
참고 _data
및 bar
재산 목록의 끝에서
내가있을 것이라고 생각 특별한 당신과 함께 인스턴스 사용자 정의 할 수 있습니다처럼 비슷한 방법으로이 사용자 정의 기능 __str__
, __repr__
등을하지만, 아직 아무것도 발견하지 않았습니다.
업데이트 : __dict__
다음과 같은 인스턴스 를 변경하지 않고 표시 할 속성 만 변경하는 것을 찾고 있습니다 .
class Foo(object):
def __init__(self, data):
self._data = data
self.__dict__.update(data) # I would prefer not to do this
이것을 할 방법이 있습니까? 도움에 미리 감사드립니다!
네, 이것이 __dir__
특별한 방법 의 목적입니다 . 에 대한 python 문서를dir()
참조하십시오 .
예를 들면 :
class Foo(object):
def __init__(self, data):
self._data = data
def __dir__(self):
return dir(object) + self.__dict__.keys() + [k for k in self._data]
foo = Foo({'bar': 'baz'})
이것은 다음을 제공합니다.
>>> foo = Foo()
>>> dir(foo)
['__class__',
'__delattr__',
'__doc__',
'__format__',
'__getattribute__',
'__hash__',
'__init__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'_data',
'bar']
아마 유일한 정말 당신이 정의하는 경우이 작업을 수행하는 의미 수 있습니다 __getattr__
또는 __getattribute__
잘 그래서 사용자가 같은 것을 쓸 수로 foo.bar
, 그렇지 않으면 dir()
일종의 오해의 소지가 될 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다