创建可管理的对象属性

下面先创建一个计算面积的类:

#!/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(value, (int, float)):
            raise ValueError("Wrong type!")
        self.radius = float(value)

    def get_area(self):
        return self.radius ** 2 * pi

这样,如果我需要得到某个实例的半径,或者面积,需要这样做:

c = Circle(3)
print(c.get_radius())

但是,有没有更简单的办法呢?

#!/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(value, (int, float)):
            raise ValueError("Wrong type!")
        self.radius = float(value)

    def get_area(self):
        return self.radius ** 2 * pi

    r = property(get_radius, set_radius)

c = Circle(3)
print(c.r)
c.r = 5
print(c.r, c.get_radius())

当然这里property 可以分别设置:

fget
fset
fdel

这里只需要设置前面的get, 及set方法,所以只写了前两个。

可以看到,经过property的使用,我们可能直接通过对r调用,来实现对  对象属性的 管理

时间: 2024-08-08 17:47:56

创建可管理的对象属性的相关文章

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):

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

创建可管理的类属性

对实例属性的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.定义数据库对象 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

黑马程序员---OC---内存管理(在对象属性的- setter和- dealloc方法里面写内存管理代码)

------iOS培训.Java培训.Android培训, iOS学习型技术博客,期待与您交流------ 内存管理(在对象属性的- setter和- dealloc方法里面写内存管理代码) 内存管理范围: 任何继承自NSObject的对象:其他数据类型(int.char.double.float.struct.enum等)不需要内存管理 对象的引用计数器: 每个OC对象内部都有自己的int类型(占据4个字节)的引用计数器,表示“对象被引用的次数”. 1> 当使用alloc.new或者copy创

Access(表的创建和管理)和CorelDRAW课程总结(对象的操作和管理)

access总结 access表的是数据库操作及录入数据的必要步骤,要用表来存储数据首先是创建一个表.要创建表首先必须了解access的数据类型.表结构字段属性等内容. 创建完表还要向其中输入数据,数据的输入必须满足原先设定的字段属性.创建完每个独立的表后,还要能建立其之间的关系.表创建完成后还要进行维护,包括修改表结构.编辑表内容.调整表格式等. 在表中存有数据时,还要能对其中数据进行各种管理,如查找.替换数据.筛选数据等. coreldraw总结 在coreldraw第三章中主要讲述了对象的

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 ]   

图形对象的创建(常用图形对象的创建方法及特殊属性)

1.图形窗口对象 MATLAB的一切图形图像的输出都是在图形窗口中完成的. 一.创建 建立图形窗口对象使用figure函数,其调用格式为:句柄变量=figure(属性名1,属性值1,属性名2,属性值2,...) MATLAB通过对属性一的操作来改变图形窗口的形式.也可以使用figure函数按MATLAB默认的属性值建立图形窗口,格式为:figure  或  句柄变量 =figure MATLAB通过figure函数建立窗口之后,还可以调用figure函数来显示该窗口,并将其设定为当前窗口,调用格