首页 > 其他分享 >property 属性

property 属性

时间:2023-08-27 16:11:06浏览次数:49  
标签:self width radius property age 属性

说明

在 Python 中,property 属性是一种特殊的属性,它允许你在访问和设置对象的属性时执行自定义的操作。property 属性用于将方法转化为属性,从而在外部代码中可以像访问普通属性一样访问这些方法。它是一种实现封装和控制属性访问的强大工具。

property 属性的主要目的是提供一种更加灵活和可控的方式来处理类的属性,它能够让你定义在属性被读取、设置或删除时需要执行的逻辑,从而实现属性访问的各种行为。

property 属性通常由以下几个部分组成:

  1. getter 方法:用于获取属性值。这个方法在你访问属性时被调用。

  2. setter 方法:用于设置属性值。这个方法在你给属性赋值时被调用。

  3. deleter 方法:用于删除属性。这个方法在你使用 del 语句删除属性时被调用。

通过定义这些方法,你可以控制对属性的访问、修改和删除,从而实现数据的封装和更复杂的操作。

说白了就是把方法装饰成属性。使用方式与使用属性一样。这在封装数据、控制访问权限以及动态计算属性时非常有用。

分类

property 的定义方式有两种:使用装饰器和经典的 getter、setter、deleter 方法。

示例

1. 没有使用property属性的样子

 1 class Person(object):
 2     def __init__(self):
 3         self.__age = 0
 4 
 5     # 获取属性
 6     def get_age(self):
 7         return self.__age
 8 
 9     # 修改属性
10     def set_age(self, new_age):
11         self.__age = new_age
12 
13 
14 # 方式1: 正常的对象调用方法即没有使用property属性
15 p = Person()
16 age = p.get_age()
17 print(age)
18 p.set_age(10)
19 age = p.get_age()
20 print(age)

输出结果:

0
10

  

2.  使用装饰器方式

 1 '''
 2 在Python中,可以使用两种方式来定义类的属性:使用装饰器和使用经典的getter、setter、deleter方法。这两种方式都可以用来在类中实现属性的访问控制和操作。
 3 1. 使用装饰器方式定义属性:
 4     Python引入了property装饰器,它允许你将一个方法标记为属性,并在访问属性时自动调用该方法。property装饰器可以用来创建只读、只写或读写属性
 5 2. 使用经典的 getter、setter、deleter 方法方式定义属性:
 6     在Python中,你也可以使用经典的getter、setter和deleter方法来定义属性,这种方式更加灵活,允许你在属性访问、设置和删除时执行自定义操作。
 7 '''
 8 
 9 class Circle:
10     def __init__(self, radius):
11         self._radius = radius
12 
13     @property  # 使用装饰器方式,让radius方法像属性一样使用,属性名为radius。  读
14     def radius(self):
15         return self._radius
16 
17     @radius.setter  # @方法名.setter,把此方法当属性使用,为其赋值时,自动执行此方法。 写
18     def radius(self, value):
19         if value >= 0:
20             self._radius = value
21         else:
22             raise ValueError("Radius cannot be negative.")
23 
24     @property
25     def area(self):  # 只为此属性,设置了读,无写
26         return 3.14159 * self._radius ** 2
27 
28 
29 circle = Circle(5)
30 print(circle.radius)  # 使用属性访问器获取半径
31 print(circle.area)  # 自动计算面积
32 circle.radius = 7  # 使用属性设置器设置半径
33 print(circle.radius)
34 print(circle.area)

输出:

5
78.53975
7
153.93791

  

3. 经典的 getter、setter、deleter 方法

'''
在Python中,可以使用两种方式来定义类的属性:使用装饰器和使用经典的getter、setter、deleter方法。这两种方式都可以用来在类中实现属性的访问控制和操作。
1. 使用装饰器方式定义属性:
    Python引入了property装饰器,它允许你将一个方法标记为属性,并在访问属性时自动调用该方法。property装饰器可以用来创建只读、只写或读写属性
2. 使用经典的 getter、setter、deleter 方法方式定义属性:
    在Python中,你也可以使用经典的getter、setter和deleter方法来定义属性,这种方式更加灵活,允许你在属性访问、设置和删除时执行自定义操作。
'''


class Rectangle:
    def __init__(self, width, height):
        self._width = width
        self._height = height

    def get_width(self):  # 经典的getter方法
        return self._width

    def set_width(self, value):  # 经典的setter方法
        if value >= 0:
            self._width = value
        else:
            raise ValueError("Width cannot be negative.")

    def del_width(self): # 经典的deleter方法
        del self._width

    width = property(get_width, set_width, del_width) # property属性装饰一下

    @property
    def area(self):
        return self._width * self._height


rectangle = Rectangle(4, 5)
print(type(rectangle.width))  # <class 'int'>
print(rectangle.width)  # 使用属性访问器获取宽度
print(rectangle.area)
rectangle.width = 6  # 使用属性设置器设置宽度
print(rectangle.width)
print(rectangle.area)
del rectangle.width  # 使用属性删除器删除宽度属性

输出:

<class 'int'>
4
20
6
30

  

标签:self,width,radius,property,age,属性
From: https://www.cnblogs.com/allenxx/p/17660396.html

相关文章

  • StandardXAPoolDataSource的CheckLevelObject属性
    调用StandardPoolDataSource或者StandardXAPoolDataSource的setCheckLevelObject(int)方法设置连接检查级别,参数取值如下:0:不检查1:对unlocked池中获取的连接进行Closed检查2:对unlocked池中获取的连接进行sql测试,需要设置setJdbcTestStmt(TestSQL)......
  • wml input标记的format属性
    1、wml  input标记的format属性A从A到Z的任何大写字母,没有数字或其他字符。a从a到z的任何小写字母,没有数字和其他字符。N任何0到9的数字。X从A到Z从0到9的任何字符。x从a到z从0到9的任何字符。M任何字符,输入默认从大写开始。m任何字符,输入默认从小写开始。*f(星号)意味着......
  • <img>中align的属性介绍
    AbsBottom图像的下边缘与同一行中最大元素的下边缘对齐。AbsMiddle图像的中间与同一行中最大元素的中间对齐。Baseline图像的下边缘与第一行文本的下边缘对齐。Bottom图像的下边缘与第一行文本的下边缘对齐。Left图像沿网页的左边缘对齐,文字在图像右边换行。Middle图像......
  • Python 实现 定义个矩形类,有长和宽两个实例属性,还有一个计算面积的方法
    思路:'''1.定义矩形类2.定义属性属性分:类属性和实例属性实例属性==》self.属性===》self是一个参数在一个方法中==》_init_方法3.定义方法defArea(self):s=self.length*self.width'''classSquare:def__init__(self,length,width):#实例属性sel......
  • 类定义、属性、初始化和析构知识点总结
    一:前言:为什么要学类?   类是一个独立存放变量(属性/方法)的空   1.简化代码,提升效率,避免代码重复写入。如用户注册、校验、登录方法可以放在一个类中,需要哪个方法就调用哪个类===》建立模型框架(建立一个方法)===》很多鼠标(实例化)===》都是独立的2.面向对象:直接给我......
  • scroll-view 组件里的 scroll-into-view 属性实例
    微信小程序的scroll-view组件中,scroll-into-view属性可以指定滚动到指定id的位置。<scroll-viewclass="content"scroll-yscroll-into-view="{{intoIndex}}"scroll-with-animation>intoIndex值应为某子元素id(id不能以数字开头),设置哪个方向可滚动,则在哪个方向滚动到该......
  • 5文件属性
    普通文件 f/-(file)​ ①.纯文本文件text/etc/hosts​ ②.二进制文件binary/bin/ls​ ③.数据型文件data/tmp/etc.tar.gz目录文件 d/d(directory)​ 链接文件​ l/l(软链接符号链接快捷方式)​ 设备文件​ c/c(character)(字符......
  • untity的SerializedProperty介绍
    SerializedProperty是Unity中用于访问和修改序列化对象属性的类。在Unity中,序列化对象是指可以在Inspector面板中显示和编辑的对象,例如组件、脚本等。SerializedProperty提供了访问和修改序列化对象属性的方法,可以通过它来获取属性的值、设置属性的值、判断属性是否可见、获取属......
  • vue监听对象属性值发生变化
    监听对象属性object里面属性值的变化。exportdefault{data(){return{object:{username:'',password:''}}}} 方法一:直接根据watch来监听。exportdefault{data(){......
  • HttpWebRequestElement.UseUnsafeHeaderParsing Property
    目录异常信息解决办法相关参考异常信息System.Net.WebException:“服务器提交了协议冲突.Section=ResponseHeaderDetail=CR后面必须是LF”解决办法一、通过配置文件实现web.config或app.config中设置如下属性<system.net><settings><httpWebRequestuseUn......