객체가 초기화되는 클래스를 XML 코드 인 으로 만듭니다. 이 클래스는 해당 XML에서 다양한 매개 변수를 추출하고이를 객체 상태 변수 내부에 캐시하는 기능을 가지고 있습니다. 이 매개 변수의 잠재적 인 양은 크며 사용자가 대부분 필요하지는 않습니다. 이것이 내가 "게으른"초기화를 수행하기로 결정한 이유입니다.부작용이있는 게터
다음 테스트 케이스에서 그러한 매개 변수는 title
입니다. 사용자가 처음으로 액세스하려고 할 때, 게터 기능이 제대로, XML을 구문 분석하는 상태 변수를 초기화하고 그 값 반환이 좋은 모양과 나를 위해 잘 작동
class MyClass(object):
def __init__(self, xml=None):
self.xml = xml
self.title = None
def get_title(self):
if self.__title is None:
self.__title = self.__title_from_xml()
return self.__title
def set_title(self, value):
self.__title = value
title = property(get_title, set_title, None, "Citation title")
def __title_from_xml(self):
#parse the XML and return the title
return title
합니다. 그러나 getter 함수가 실제로 객체에 매우 중요한 부작용이 있다는 의미에서 실제로 "설정자"라는 사실로 인해 약간 불안합니다. 이것은 합법적 인 관심사입니까? 그렇다면 어떻게해야합니까?
질문에 대한 실제 답변이 무엇이든 관계없이 맨 앞의 두 개의 밑줄을 사용하지 마십시오. 그들은 이름 맹 글링을 시작합니다. 즉 많은 고통과 이득을 얻습니다. 한 줄의 밑줄 만 사용하십시오. – delnan
나는 그것이 왜 문제인지 보지 못했다. –
사소한 리팩토링 제안 : 생성자에서'self._title'을 초기화하지 말고'hasattr (self, "_title")'에 의해 getter의 조건을 바꿉니다. –