파이썬에서 객체 속성 반복하기
여러 속성과 메서드가 있는 파이썬 객체가 있습니다. 객체 속성을 반복하고 싶습니다.
class my_python_obj(object):
attr1='a'
attr2='b'
attr3='c'
def method1(self, etc, etc):
#Statements
모든 객체 속성과 현재 값을 포함하는 사전을 생성하고 싶지만 동적인 방식으로 하고 싶습니다(나중에 다른 속성을 추가할 때 함수를 업데이트하는 것을 기억할 필요가 없도록).
PHP에서는 변수를 키로 사용할 수 있지만 파이썬의 객체는 스크립트가 불가능하며 점 표기법을 사용하면 내 변수의 이름으로 새 속성이 생성되는데 이는 내 의도가 아닙니다.
더 명확하게 설명하기 위해서입니다:
def to_dict(self):
'''this is what I already have'''
d={}
d["attr1"]= self.attr1
d["attr2"]= self.attr2
d["attr3"]= self.attr3
return d
·
def to_dict(self):
'''this is what I want to do'''
d={}
for v in my_python_obj.attributes:
d[v] = self.v
return d
업데이트: 속성이란 메서드가 아닌 이 객체의 변수만을 의미합니다.
135
8
다음과 같은 클래스가 있다고 가정합니다.
객체에서
dir
을 호출하면 파이썬 특수 어트리뷰트를 포함한 해당 객체의 모든 어트리뷰트를 돌려받을 수 있습니다. 메서드와 같은 일부 객체 속성은 호출 가능하지만.목록 이해력을 사용하여 언제든지 특수 메서드를 필터링할 수 있습니다.
를 사용하거나 지도/필터를 선호하는 경우.
메서드를 필터링하려면 내장된
callable
을 검사로 사용할 수 있습니다.다음을 사용하여 클래스와 인스턴스 객체 간의 차이를 검사할 수도 있습니다.
클래스에:
파이썬의 객체는 (함수를 포함한) 어트리뷰트를
__dict__
라는 딕셔너리에 저장합니다. 이를 사용해 어트리뷰트에 직접 액세스할 수 있지만 일반적으로는 사용하지 않아야 합니다. 목록만 필요한 경우 모든 어트리뷰트 이름이 포함된 이터러블을 반환하는dir(obj)
을 호출하여getattr
에 전달할 수도 있습니다.그러나 변수 이름으로 무언가를 해야 하는 것은 일반적으로 나쁜 설계입니다. 컬렉션에 보관하지 않는 이유는 무엇일까요?
그런 다음
for key in obj.special_values:
를 사용하여 키를 반복할 수 있습니다.이미 언급한 바와 같이 일부 답변 / 설명, 파이썬 객체에는 사전을 저장할 이미 그들의 속성 (메서드을 aren& # 39, t 포함). 그러나 이 같은 '를 사용하는 것이 더 나은 방법으로 https://learning. dict', '은' (출력물에는 표시되어도 마찬가지다). 참고로 이 사전은 거역한다면 속성을 수정하십시오 인스턴스에 대한 수정! 하지만 수 있는 방법을 사용하면 유용할 수 있습니다 또한, 이 사전은 않도록 주의해야 합니다. # 39 의 here& 빠른 예:
"'파이썬 class A (): 데프 init (자체 x, y, z = = 3 = 2, 5): 셀프리스 = x self._y = y self.z = z
데프 f (self): 패스
a = A () 보기인쇄 (var (a))
# 39, & # 39, {x&. # 39, & # 39 3 _y&;;: # 39, & # 39 z& 2;;: 5}
모든 속성은 'a' 없고 방법!
참고 어떻게 항상 최신품이다 사전
아리스 = 10 보기인쇄 (var (a))
# 39, & # 39, {x&. 10: # 39, & # 39 _y&;; # 39, & # 39 z& 2;;: 5}
수정되므로 인스턴스 속성을 사전 수정
var (a) [" _y";] = 20 보기인쇄 (var (a))
# 39, & # 39, {x&. 10: # 39, & # 39 _y&;; # 39, & # 39 z& 20;;: 5}
"'
'사용하여 디렉터리 (a)' 는 바로 이 문제에 대한 좋지 않은 경우, 외곽진입 홀수입니다. # 39 의 it& 반복할 경우 필요한 모든 속성 및 메서드 정말 좋은 클래스 (init 'like' 특별한 방법 등). 그러나 이 doesn& # 39, t 것으로 그리웠댔지, 심지어 수락됨 오토메이티드 댁이라면 우리 섹스한거요 잘못 적용해 지루려면 그냥 속성 및 메서드 및 남겨두십시오 시도하시려면 필터링부터 일부 브리틀 위에 정의된 클래스 'A' 이 실패할 경우 확인할 수 있습니다.
(사용 'dict' 적이 몇 있지만, 이 모든 질문에 대한 불필요한 메서드을 정의하십시오 사용하지 않고 직접. 전용 [셀명] 제안됩니다 사용할 수 있는 '은').
[셀명]: https://stackoverflow.com/questions/11637293/iterate-over-object-attributes-in-python # comment93597568_11637457)
그럼 그냥 이트레이블 표시됨과 부르네요
이에 대한 정답은 하지 말아야 한다는 것입니다. 이러한 유형의 작업을 원한다면 딕셔너리를 사용하거나 일부 컨테이너에 속성을 명시적으로 추가해야 합니다. 데코레이터에 대해 배우면 이를 자동화할 수 있습니다.
특히 예제의 방법1은 좋은 어트리뷰트입니다.
파이썬 3.6tb 대한
파이썬 3.6tb 대한