2013-10-26 7 views
-1

저는 Python 속성을 처음 사용합니다. 해당 속성을 설정할 때 속성 값이 허용 된 범위 내에 있음을 보장하는 "설정자"를 만들기 위해 이들을 사용하려고합니다.클래스 내에서 파이썬 속성에 액세스

일반적인 사용 예 내가 같이 발견

class C(object): 
    def __init__(self): 
     self.__x = None 
    def getx(self): 
     print "+++ getx()" 
     return self.__x 
    def setx(self, v): 
     if (v > 0): 
      print "+++ setx({0})".format(v) 
      self.__x = v 
    def delx(self): 
     print "+++ delx()" 
     del self.__x 
    x = property(getx, setx, delx, "Me property 'x'.") 

이 간단한 예에서는, 세터 "setx"은 양의 값은 속성 자체 .__ X에 할당 할 수 있도록합니다. 여태까지는 그런대로 잘됐다. 그러나이 코드를 살펴보면 클래스 내에서 속성을 사용할 수 있는지 궁금해하기 시작했습니다. 예를 들어, 나는 다음과 같은 생성자를 가질 수 있는지 궁금해 : 순서

def __init__(self): 
    self.x = None 

는 세터 속성 자체 .__ X가 유효한 값으로 설정되고 있음을 확인하기 위해 바로 생성자 내에서 전화를받을 수 있습니다. 조금 더 나아가서, 수업 내 다른 곳에서도 똑같이 할 수 있을지 궁금합니다. (게터와 세터의 명백한 예외를 제외하고는). 그렇다면 좋은 프로그래밍 실습으로 간주됩니까? 그렇지 않은 경우 어떤 대안이 있습니까? 나는 이것에 관해 정말로 혼란 스럽다.

감사합니다.

+0

클래스의 내부 또는 외부에서 속성에 액세스하는 데 차이가 없습니다 (그리고이 문제를 작성하는 것보다 파이썬 인터프리터에서 시도하는 것이 시간이 적을 것입니다). 속성이나 실제 속성에 접근하는 것이 더 좋은지 알고 싶다면, 이것은 아마도 특정 사용 사례에 의존 할 것이다. 예에서'self .__ x = None'을'self.x = None'으로 바꾸는 것은 의미가 없다. setter는 값> 0 및'None> 0 == False'만을 설정하기 때문입니다. – l4mpi

+0

답장을 보내 주셔서 감사합니다. 실제로 질문을 제출하기 전에이 작업을 시도했지만 코드가 작동하는 것을 발견하지 못했기 때문에이 작업이 좋은 수행인지 여부 또는 내가 알지 못하는 잡기가 있는지 여부를 알 수 없었습니다. 의. 감사! –

답변

0

나는 클래스 내에서 속성을 사용할 수 있는지 궁금해하기 시작했습니다.

예, 생성자

def __init__(self): 
    self.x = None 

이 특별한 경우는 실패하지만, 이것은 (괜찮에서 세터/게터를 사용할 수 있습니다 None > 0 == False 때문에, 당신은을 통해보고 할 수있는 조건 로그 또는 예외 발생). 생성자에서 접근자를 사용하지 않으려는 이유가있을 수 있습니다. 예를 들어 생성자에서 수행하는 데 유용하지 않은 값 비싼 연산이 필요한 경우 (예 : 지연로드, 실제 초기화가 지연 될 때까지 지연)

관련 문제