美文网首页
python 创建可管理的属性-property使用

python 创建可管理的属性-property使用

作者: udhga | 来源:发表于2019-01-22 20:22 被阅读6次

对实例属性的获取和访问,我们希望增加一些额外的处理过程,比如说检查类型或者验证。
要定义对属性的访问,一种简单的方式是将其定义为property。

传统方法
class Person(object):
    def __init__(self, age):
        self.__age = age

    def get_age(self):
        return self.__age

    def set_age(self, age):
        if not isinstance(age, int) or age < 0:
            raise ValueError("age ust be int")
        self.__age = age

c = Person(100)
print(c.age)  # 报错 不能这样访问
print(c.get_age())  # 100,访问方式比较繁琐
方法一(已经存在get和set方法的 + )
class Person1(object):
    def __init__(self, age):
        self.__age = age

    def get_age(self):
        return self.__age

    def set_age(self, age):
        if not isinstance(age, int) or age < 0:
            raise ValueError("age ust be int")
        self.__age = age

    # 增加这一句
    age = property(get_age, set_age)

a = Person1(100)
print(a.age)  # 100 可以直接访问,不用调用方法
print(a.get_age()) # 100 这样调用方法也可以访问
a.age = 9
print(a.age)  # 9
方法二
class Person2(object):
    def __init__(self, age):
        self.__age = age

    @property  # 增加property装饰器
    def age(self):
        return self.__age

    @age.setter  # 增加age.setter装饰器
    def age(self, age):
        if not isinstance(age, int) or age < 0:
            raise ValueError("age ust be int")
        self.__age = age

# 注意使用这种方法的时候,都是使用age方法
a = Person2(100)
print(a.age)  # 100
a.age = 88
print(a.age)  # 88
a.age = -8
print(a.age)  # 报错
property也可以用来定义需要计算的属性,这类属性并不会实际保存起来,二时根据需要完成计算
import math
class Circle:
    def __init__(self, radius):
        self.radius = radius

    @property
    def area(self):
        return math.pi * self.radius ** 2

    @property
    def perimeter(self):
        return 2 * math.pi * self.radius


c1 = Circle(5)
print(c1.radius)
print(c1.area)
print(c1.perimeter)

相关文章

  • python 创建可管理的属性-property使用

    对实例属性的获取和访问,我们希望增加一些额外的处理过程,比如说检查类型或者验证。要定义对属性的访问,一种简单的方式...

  • iOS进阶之熟悉对象

    @property: 使用@property创建属性,编译器会自动为该属性创建get和set方法,并且自动在名字上...

  • OC -- 点语法

    创建类:User 当我们使用@property 创建属性的时候,会产生“.语法”--> 使用“.”代替set 和 ...

  • @property

    使用@property装饰器来创建只读属性,@property装饰器会将方法转换为相同名称的只读属性,可以与所定义...

  • SwiftInDepth_03_属性整洁之道

    前言 如何创建getter和setter计算属性 何时(不)使用计算属性 使...

  • Python中的property

    Python中的property是用于实现属性可管理性的bulit-in数据类型(从表现上来看,property是...

  • Swift 方法(Methods)

    Method 方法与计算型属性的使用选取 1.优先考虑使用 computed property(计算型属性) ,可...

  • Python学习笔记(十七)使用@property,多重继承

    使用@property Python内置的@property装饰器就是负责把一个方法变成属性调用的 把一个gett...

  • 深入浅出Objective-C笔记(十一)

    属性 (Property) 不使用属性的情况 使用属性的情况   在使用property这个关键字声明一条属性的时...

  • python @property

    参考 Python进阶之“属性(property)”详解 - Python - 伯乐在线

网友评论

      本文标题:python 创建可管理的属性-property使用

      本文链接:https://www.haomeiwen.com/subject/lrerjqtx.html