파 이 썬 기반dict__dir()와 의 차이 에 대한 상세 한 설명

4910 단어 pythondirdict
Python 아래 의 모든 대상 은 대상 마다 여러 개의 속성(attribute)이 있 고 Python 은 속성 에 대해 통 일 된 관리 방안 을 가지 고 있 습 니 다.
__dict__dir()와 의 차이 점:
dir()는 함수 입 니 다.list 를 되 돌려 줍 니 다.
__dict__하나의 사전 입 니 다.키 는 속성 명 이 고 값 은 속성 값 입 니 다.
dir()는 대상 의 모든 속성 을 찾 는 데 사 용 됩 니 다. 를 포함 합 니 다.dict__중의 속성,dict__dir()의 부분 집합 입 니 다.
모든 대상 이 를 가지 고 있 는 것 은 아니다.dict__속성많은 내장 유형 은 가 없다dict__속성,예 를 들 어 list 는 대상 의 모든 속성 을 dir()로 표시 해 야 합 니 다.
__dict__속성
__dict__대상 속성 을 저장 하 는 사전 입 니 다.키 는 속성 명 이 고 값 은 속성 값 입 니 다.

#!/usr/bin/python
# -*- coding: utf-8 -*-
class A(object):
  class_var = 1
  def __init__(self):
    self.name = 'xy'
    self.age = 2

  @property
  def num(self):
    return self.age + 10

  def fun(self):pass
  def static_f():pass
  def class_f(cls):pass

if __name__ == '__main__':#   
  a = A()
  print a.__dict__  #{'age': 2, 'name': 'xy'}      __dict__  
  print A.__dict__  
  '''
   A __dict__  
  {
  '__dict__': <attribute '__dict__' of 'A' objects>, #               5
  '__module__': '__main__',        #    
  'num': <property object>,        #     
  'class_f': <function class_f>,     #   
  'static_f': <function static_f>,    #    
  'class_var': 1, 'fun': <function fun >, #   
  '__weakref__': <attribute '__weakref__' of 'A' objects>, 
  '__doc__': None,            #class     
  '__init__': <function __init__ at 0x0000000003451AC8>}
  '''

  a.level1 = 3
  a.fun = lambda :x
  print a.__dict__ #{'level1': 3, 'age': 2, 'name': 'xy','fun': <function <lambda> at 0x>}
  print A.__dict__ #       

  A.level2 = 4
  print a.__dict__ #{'level1': 3, 'age': 2, 'name': 'xy'}
  print A.__dict__ #   level2  

  print object.__dict__
  '''
  {'__setattr__': <slot wrapper '__setattr__' of 'object' objects>, 
  '__reduce_ex__': <method '__reduce_ex__' of 'object' objects>, 
  '__new__': <built-in method __new__ of type object at>, 
   .....
  '''
상기 코드 에서 알 수 있 듯 이,
실례 적dict__이 인 스 턴 스 와 관련 된 인 스 턴 스 속성 만 저장 합 니 다.
바로 실례 의dict__속성,모든 인 스 턴 스 의 인 스 턴 스 속성 이 서로 영향 을 주지 않 습 니 다.
클래스dict__모든 인 스 턴 스 가 공유 하 는 변수 와 함수(클래스 속성,방법 등),클래스 의 를 저장 합 니 다.dict__부모 클래스 의 속성 을 포함 하지 않 습 니 다.
dir()함수
dir()는 Python 이 제공 하 는 API 함수 입 니 다.dir()함 수 는 대상 의 모든 속성(부모 클래스 에서 계승 하 는 속성 포함)을 자동 으로 찾 습 니 다.
하나의 실례 적 인dict__속성 은 그 실례 의 실례 속성의 집합 일 뿐 이 실례 의 모든 유효한 속성 을 포함 하지 않 습 니 다.따라서 대상 의 모든 유효한 속성 을 가 져 오 려 면 dir()를 사용 해 야 합 니 다.

print dir(A)
'''
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'class_f', 'class_var', 'fun', 'level1', 'level2', 'name', 'num', 'static_f']
'''
a_dict = a.__dict__.keys()
A_dict = A.__dict__.keys()
object_dict = object.__dict__.keys()
print a_dict 
print A_dict 
print object_dict 
'''
['fun', 'level1', 'age', 'name']

['__module__', 'level2', 'num', 'static_f', '__dict__', '__weakref__', '__init__', 'class_f', 'class_var', 'fun', '__doc__']

['__setattr__', '__reduce_ex__', '__new__', '__reduce__', '__str__', '__format__', '__getattribute__', '__class__', '__delattr__', '__subclasshook__', '__repr__', '__hash__', '__sizeof__', '__doc__', '__init__']
'''

#         __doc__  ,      ,       
print set(dir(a)) == set(a_dict + A_dict + object_dict) #True
결론.
dir()함 수 는 를 포함 하여 한 대상 의 모든 속성 을 자동 으로 찾 습 니 다.dict__속성
__dict__dir()의 부분 집합 입 니 다.dir()는 를 포함 합 니 다.dict__속성
이상 이 편 은 Python 에 기초 하고 있 습 니 다.dict__dir()와 의 차이 점 에 대한 상세 한 설명 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 에 게 참고 가 되 고 저희 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기