programing

Python: 문자열에서 클래스 속성에 액세스합니다.

firstcheck 2022. 10. 30. 22:23
반응형

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

반응형