반응형
Python: 문자열에서 클래스 속성에 액세스합니다.
저는 다음과 같은 수업을 듣습니다.
class User:
def __init__(self):
self.data = []
self.other_data = []
def doSomething(self, source):
// if source = 'other_data' how to access self.other_data
에서 소스 변수의 문자열을 전달하고 싶다.doSomething
같은 이름의 클래스 멤버에 접속합니다.
난 시도했다.getattr
(제가 아는 바로는) 기능만 사용할 뿐 아니라User
확장하다dict
및 사용self.__getitem__
하지만 그것도 효과가 없습니다.어떻게 하면 좋을까요?
x = getattr(self, source)
만일의 경우에 딱 들어맞는다source
모든 자기 속성에 이름을 붙입니다.other_data
를 참조해 주세요.
한 장의 사진이 천 마디 말보다 더 가치가 있다.
>>> class c:
pass
o = c()
>>> setattr(o, "foo", "bar")
>>> o.foo
'bar'
>>> getattr(o, "foo")
'bar'
getattr(x, 'y')
와 동등하다setattr(x, 'y', v)
와 동등하다delattr(x, 'y')
와 동등하다
Alex의 답변을 약간 확장합니다.
class User:
def __init__(self):
self.data = [1,2,3]
self.other_data = [4,5,6]
def doSomething(self, source):
dataSource = getattr(self,source)
return dataSource
A = User()
print A.doSomething("data")
print A.doSomething("other_data")
결과:
[1, 2, 3][4, 5, 6]
하지만 개인적으로 좋은 스타일은 아닌 것 같아요.getattr
인스턴스 속성(예:doSomething
메서드 자체 또는__dict__
의 예를 나타냅니다.대신 다음과 같이 데이터 소스 사전을 구현할 것을 제안합니다.
class User:
def __init__(self):
self.data_sources = {
"data": [1,2,3],
"other_data":[4,5,6],
}
def doSomething(self, source):
dataSource = self.data_sources[source]
return dataSource
A = User()
print A.doSomething("data")
print A.doSomething("other_data")
다시 산출:
[1, 2, 3][4, 5, 6]
언급URL : https://stackoverflow.com/questions/1167398/python-access-class-property-from-string
반응형
'programing' 카테고리의 다른 글
2.4 ebean 업데이트 최적 잠금 재생 (0) | 2022.10.30 |
---|---|
삽입된 ID를 TypeORM & NestJS raw 쿼리: wait connection.manager와 함께 반환합니다.쿼리('삽입처') (0) | 2022.10.30 |
FileReader와 BufferedReader를 모두 닫아야 합니까? (0) | 2022.10.30 |
mysqld.sock을 찾을 수 없음: 소켓 '/var/run/mysqld/mysqld'를 통해 로컬 MySQL 서버에 연결할 수 없습니다.sock' (2 "그런 파일 또는 디렉토리가 없습니다") (0) | 2022.10.30 |
도커 이미지 내에서 MariaDB가 시작되지 않음 (0) | 2022.10.30 |