7-4 如何创建可管理的对象属性

>>> help(property)
Help on class property in module __builtin__:

class property(object)
 |  property(fget=None, fset=None, fdel=None, doc=None) -> property attribute
 |
 |  fget is a function to be used for getting an attribute value, and likewise
 |  fset is a function for setting, and fdel a function for del‘ing, an
 |  attribute.  Typical use is to define a managed attribute x:
 |
 |  class C(object):
 |      def getx(self): return self._x
 |      def setx(self, value): self._x = value
 |      def delx(self): del self._x
 |      x = property(getx, setx, delx, "I‘m the ‘x‘ property.")
 |
 |  Decorators make defining new properties or modifying existing ones easy:
 |
 |  class C(object):
 |      @property
 |      def x(self):
 |          "I am the ‘x‘ property."
 |          return self._x
 |      @x.setter
 |      def x(self, value):
 |          self._x = value
 |      @x.deleter
 |      def x(self):
 |          del self._x
 |
 |  Methods defined here:
 |
 |  __delete__(...)
 |      descr.__delete__(obj)
 |
 |  __get__(...)
 |      descr.__get__(obj[, type]) -> value
 |
 |  __getattribute__(...)
 |      x.__getattribute__(‘name‘) <==> x.name
 |
 |  __init__(...)
 |      x.__init__(...) initializes x; see help(type(x)) for signature
 |
 |  __set__(...)
 |      descr.__set__(obj, value)
 |
 |  deleter(...)
 |      Descriptor to change the deleter on a property.
 |
 |  getter(...)
 |      Descriptor to change the getter on a property.
 |
 |  setter(...)
 |      Descriptor to change the setter on a property.
 |
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |
 |  fdel
 |
 |  fget
 |
 |  fset
 |
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |
 |  __new__ = <built-in method __new__ of type object>
 |      T.__new__(S, ...) -> a new object with type S, a subtype of T

help(property)

property()三个参数分别是访问方法,设置方法。

from math import pi

class Circle(object):
    def __init__(self,radius):
        self.radius = radius

    def getRadius(self):
        return self.radius
    def setRadius(self,value):
        if not isinstance(value,(int,long,float)):
            raise ValueError(‘wrong data type,please slecet int or long or float‘)
        self.radius = value

    def getArea(self):
        return self.radius ** 2 * pi
    R = property(getRadius,setRadius)

c = Circle(3.2)

print (c.getArea())

print (c.R)                #以属性方式访问,实际上调用的是getRadius

c.R = 4                    #以属性方式访问,实际上调用的是setRadius

print(c.R)
print(c.getArea())

输出结果:

32.1699087728

3.2

4

50.2654824574

原文地址:https://www.cnblogs.com/smulngy/p/9008418.html

时间: 2024-10-16 03:07:06

7-4 如何创建可管理的对象属性的相关文章

创建可管理的对象属性

下面先创建一个计算面积的类: #!/usr/bin/env python #coding:utf-8 #Created by Andy @ 2017/7/1 from math import pi class Circle: def __init__(self, radius): self.radius = radius def get_radius(self): return self.radius def set_radius(self, value): if not isinstance(

python_如何创建可管理的对象属性

案例: 在面向对象编程中,我们把方法作为对象的接口,自己访问对象的属性可能是不安全的,或设计上不灵活,但是使用调用方法在形式上不如访问属性简洁 繁: circle.getRadius() circle.setRadius(5.0) #!/usr/bin/python3 from math import pi class Circle(): def __init__(self, radius): self.radius = radius # 获取半径接口 def get_radius(self):

创建可管理的类属性

对实例属性的set或get进行额外的处理(例如,类型检查或验证). 可以使用类property对属性进行set,get,delete的定制化.类签名如下: class property(fget=None, fset=None, fdel=None, doc=None) 返回一个property的属性,fget是用于获取属性值的函数. fset是用于设置属性值的功能. fdel是用于删除属性值的函数. doc为该属性创建一个docstring. 典型的用途是定义托管的属性x,如下: class

QtQuick桌面应用开发指导 3)实现UI和功能_B 4)动态管理Note对象_A

3.2 把Page Item和Marker Item绑定 之前我们实现了PagePanel组件, 使用了三个state来切换Page组件的opacity属性; 这一步我们会使用Marker和MarkerPanel组件来实现页面导航; 在原型阶段, MarkerPanel组件十分简单, 没有任何功能; 它使用了Repeater类型来产生三个QML Item以及Marker组件作为delegate; MarkerPanel应该存储当前激活的marker(标记), 即那个被用户点击的marker; 基

Greenplum+Hadoop学习笔记-14-定义数据库对象之创建与管理表

6.4.创建与管理表 6.4.1.创建表 通过查询CREATETABLE命令帮助如下所示: Command:     CREATE TABLE Description: define a new table Syntax: CREATE [[GLOBAL | LOCAL] {TEMPORARY | TEMP}] TABLE table_name (     -->指定表类型:全局|本地临时 [ { column_name data_type [ DEFAULT default_expr ]   

Greenplum+Hadoop学习笔记-14-定义数据库对象之创建与管理数据库

6.定义数据库对象 6.1.创建与管理数据库 通过\h命令查看创建数据库的语法,如下所示: testdw-# \h create database Command:     CREATE DATABASE Description: create a new database Syntax: CREATE DATABASE name [ [ WITH ] [ OWNER [=] dbowner ] [ TEMPLATE [=] template ] [ ENCODING [=] encoding

Greenplum+Hadoop学习笔记-14-定义数据库对象之创建与管理表空间

6.2.创建与管理表空间 表空间建立在文件空间之上,文件空间建立在一系列文件系统之上.关于gpfilespace的所有说明如下所示: [[email protected] gpfs]$ gpfilespace --help COMMAND NAME: gpfilespace Creates a filespace using a configuration file that defines per-segment file system locations. Filespaces descri

Greenplum+Hadoop学习笔记-14-定义数据库对象之创建与管理模式

6.3.创建与管理模式 概述:DB内组织对象的一种逻辑结构,一个DB内可以有多个模式,在未指定模式时默认放置在public中,可以通过"\dn"方式查看数据库中现有模式: testdw=# \dn List of schemas Name        |  Owner --------------------+--------- gp_toolkit         | gpadmin information_schema | gpadmin pg_aoseg           |

数据库对象的创建和管理

--数据库对象的创建和管理 DDL(数据定义语言) --表(table): 数据库存储的基本单元; --约束条件(constraint):用来确保数据库中数据的完整性,确保数据满足某些特定的商业规则 --视图(view):一个或多个表的逻辑表示或虚拟表示,主要用于简化查询操作 --索引(index):用于加速数据访问数据库对象,提高访问效率 --序列(sequence):用于生成唯一数字值的数据库对象,序列的生成机制会自动生成顺序递增的数字,可以用来作为数据表的主键值 --同义词(synonym