클래스 메서드에서 property() 사용
Python은 계산되는 읽기 전용 또는 읽기-쓰기 속성을 생성하기 위해 property() 데코레이터를 제공합니다. 동적으로. 그러나 클래스 메서드와 결합하면 이 접근 방식은 몇 가지 제한 사항에 직면합니다.
Python 버전 3.8 이상에서는 property() 데코레이터를 클래스 메서드에 직접 적용할 수 있으므로 클래스 속성에 간결하게 액세스할 수 있습니다.
class Foo: _var = 5 @classmethod @property def var(cls): return cls._var @classmethod @var.setter def var(cls, value): cls._var = value
그러나 Python 2와 Python 3 3.8 이전 버전에서는 다른 접근 방식이 필요합니다. 속성은 인스턴스에 정의되므로 클래스 메서드와 함께 속성을 사용하려면 클래스의 메타클래스에 속성을 생성해야 합니다.
class Foo(object): _var = 5 class __metaclass__(type): def __init__(cls, name, bases, dict): super().__init__(name, bases, dict) cls.var = property(cls.getvar, cls.setvar) @classmethod def getvar(cls): return cls._var @classmethod def setvar(cls, value): cls._var = value
이 예에서 __metaclass__는 메타클래스의 속성을 정의한 다음 해당 인스턴스에 의해 상속됩니다. Foo 클래스.
또는 메타클래스 매개변수를 사용하여 사용자 정의를 정의할 수 있습니다. 메타클래스:
class FooMeta(type): def __init__(cls, name, bases, dict): super().__init__(name, bases, dict) cls._var = 5 cls.var = property(cls.getvar, cls.setvar) @classmethod def getvar(cls): return cls._var @classmethod def setvar(cls, value): cls._var = value class Foo(metaclass=FooMeta): pass
이 설정에서 메타클래스는 _var 속성을 초기화하고 var 속성을 정의합니다. Foo의 인스턴스는 var 속성을 상속하고 이에 따라 _var 속성에 액세스할 수 있습니다.
위 내용은 Python에서 클래스 메서드와 함께 `property()` 데코레이터를 어떻게 사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!