>

@classmethod 내에서 속성 값에 액세스하는 방법 ? 예를 들면 다음과 같습니다.

class Account(polymodel.PolyModel):
  someprop = ndb.StringProperty(required=True)
​
    @classmethod
    def get_or_create_someprop(cls):
        if not cls.someprop:
            # create someprop
        else: 
            return cls.someprop

위의 예제 코드에서 someprop 를 만들려고합니다.  존재하지 않는 경우, 또는 이미 존재하는 경우 반환하십시오. 위의 코드가 이것을 달성한다고 가정했습니다. 그러나 내가해야 할 첫 번째 단계는 someprop 에 액세스하는 것입니다  classmethod 내에서 값. cls.someprop 사용  실제로 someprop 의 값을 반환하지 않습니다  그러나 대신 StringProperty('state') 를 반환합니다. .

this 를 사용하려고했습니다  그리고 self  어느 undefined 입니다 .

그래서 클래스 메소드를 사용하여 엔터티의 속성 값에 액세스 할 수 있습니까? 그렇다면 어떻게해야합니까?


  • 답변 # 1

    일반적으로 속성은 객체, 즉 클래스의 인스턴스 (클래스는 객체 생성기)에 속하기 때문에 클래스 메소드 에서이 작업을 수행 할 수 없습니다. 다시 말해 당신은 self 가 필요합니다  객체 및 해당 속성을 나타내는 인수입니다.

    특정 사례에서 클래스는 엔티티 모델이 아닌 엔티티 모델 (엔티티를 만들기위한 청사진)이며 엔티티 자체의 속성 만 참조 할 수 있습니다.

    그러나 클래스 메소드를 선언하지 않으면 서 원하는 것을 달성 할 수 있어야한다. 그러면 객체/엔티티의 메소드가되고,이 경우 다음을 통해 엔티티의 속성을 참조 할 수있다 와이즈 비즈   self 대신 : cls .

    하지만 속성에 0과 같은 값이 있거나 빈 문자열이 파이썬에 의해 self.someprop 로 해석되는 경우를 다루기 위해 검사를 좀 더 구체적으로 만들었습니다.  논리적 검사에서 : False   if self.someprop is None 대신 .

    if not self.someprop

관련 자료

  • 이전 amazon s3 - S3 버킷에 대한 VPC 액세스 정책
  • 다음 스위프트에서의 테스트를위한 튜플