본문 바로가기

코딩/파이썬 kivy

[kivy-007] Kivy 클래스 프라퍼티

kivy : getting started : properties

Kivy 클래스 프라퍼티

클래스 프라퍼티(property)라 함은 클래스 또는 클래스 객체의 멤버(변수)를 의미한다.

보통 임의 클래스에 대한 객체의 멤버(변수)는 클래스의 임의 메서드가 실행되면서 생성된다.

 

예를 들어 MyClass 클래스의 객체는 해당 객체가 생성되는 단계에서 객체 변수 numeric_var이/가 생성된다.

 

class MyClass:
    def __init__(self):
        self.numeric_var = 1

 

kivy는 클래스의 프라퍼티를 정의하는 새로운 방식을 제공하는데,

kivy의 properties 모듈에서 NumericProperty와 같은 클래스를 사용해 클래스의 프라퍼티를 정의한다.

 

kivy에서 제공하는 클래스 프라퍼티 정의 방식은 아래와 같다.

 

class MyClass:
	numeric_var = NumericProperty()

 

하지만 위의 코드는 개념적 차원에서 설명한 것이고, 실제 실행되는 코드는 다음과 같다.

 

from kivy.app import App
from kivy.properties import NumericProperty
from kivy.uix.label import Label

class MyApp(App):
    numeric_var = NumericProperty(1)

    def build(self):
        return Label(text='Hello')

if __name__ == '__main__':
    print(MyApp.numeric_var, type(MyApp.numeric_var))

    myapp = MyApp()

    print(MyApp.numeric_var, type(MyApp.numeric_var))
    print(myapp.numeric_var, type(myapp.numeric_var))

    MyApp.numeric_var = 10
    myapp.numeric_var = 20

    print(MyApp.numeric_var, type(MyApp.numeric_var))
    print(myapp.numeric_var, type(myapp.numeric_var))

    MyApp.numeric_var += 1
    myapp.numeric_var += 1

    print(MyApp.numeric_var, type(MyApp.numeric_var))
    print(myapp.numeric_var, type(myapp.numeric_var))
    
    myapp.run()

 

아래의 실행 결과에서 알 수 있듯이 MyApp 클래스의 변수 numeric_var과 MyApp 클래스의 객체 myapp의 변수 numeric_var의 사용 순서별 타입과 값이 차이가 난다.

 

MyApp 클래스 변수 numeric_var는 해당 변수에 값을 대입하기 전까지 값을 갖고 있지 않지만,

MyApp 클래스의 객체 myapp은 객체가 생성되면 numeric_var 변수에 1이 저장되어 있는 것을 볼 수 있다.

 

클래스 프라퍼티의 타입 및 값

 

NumericProperty 클래스 등을 이용해 클래스의 프라퍼티를 정의하면, 해당 프라퍼티는 기본적으로 on_<propertyname> 이벤트를 제공한다고 한다. 이는 추후에 알아 보기로 한다.

 

kivy에서 제공하는 프라퍼티 관련 클래스는 다음과 같다.

 

  • NumericProperty
  • StringProperty
  • ListProperty
  • ObjectProperty
  • BooleanProperty
  • BoundedNumericProperty
  • OptionProperty
  • ReferenceListProperty
  • AliasProperty
  • DictProperty