官术网_书友最值得收藏!

  • Kivy Cookbook
  • Hugo Solis
  • 318字
  • 2021-07-16 20:39:54

Declaring properties within a class

Here we want to highlight an important difference between traditional Python coding and Kivy, and the usefulness of this change.

Getting ready

We need to remember the traditional form to declare properties in Python. Usually, if we want to declare a property in Python, we do something such as:

class MyClass(object):
    def __init__(self):
        super(MyClass,self).__init__()
        self._numeric_var = 1
@property
    def numeric_var(self): 
        return self._numeric_var

We are declaring a numeric one, whereas if we use MyClass().numeric_var in the Python shell, we get 1 in return.

How to do it…

Now, to declare this property in Kivy we follow these steps:

  1. Import Kivy and its properties
  2. Define the class
  3. Reference the Kivy property, in this case the numeric one:
    import kivy
    
    from kivy.event import EventDispatcher
    from kivy.properties import *
    
    class MyClass(EventDispatcher):
        numeric_var = NumericProperty(1.0)

How it works…

The idea behind this is that you inherit the declaration from Kivy's properties, which reduces the number of code lines.

To use them, you have to declare them at a class level. That is, directly in the class, not in any method for the class. A property is a class attribute that will automatically create instance attributes. Each property, by default, provides an on_<propertyname> event that is called whenever the property's state/value changes.

Something additional to point out is that NumericProperty accepts all the Python numeric values: ints, floats, and longs.

In general, Kivy properties can be overridden easily when creating the instance of the class, using keyword arguments such as ClassName(property=newvalue).

There's more…

They help you to:

  • Easily manipulate widgets defined in the Kv language
  • Automatically observe any changes
  • Check and validate values
  • Optimize memory management

Kivy provides more properties as follows:

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

See also

These properties actually implement the Observer pattern; if you want to learn more about patterns, you can find information online at http://www.oodesign.com/observer-pattern.html.

主站蜘蛛池模板: 康马县| 通许县| 敦化市| 大同县| 雷州市| 齐齐哈尔市| 富民县| 谢通门县| 永川市| 奉贤区| 剑阁县| 清徐县| 温泉县| 东兴市| 益阳市| 马关县| 秦皇岛市| 武冈市| 崇州市| 焦作市| 南召县| 百色市| 东海县| 同心县| 新巴尔虎右旗| 仁化县| 民乐县| 文水县| 饶河县| 东乌珠穆沁旗| 定兴县| 张家界市| 白城市| 绥棱县| 石狮市| 昂仁县| 霍城县| 嘉黎县| 虹口区| 丹凤县| 宽甸|