首页 > 编程语言 >20.python@property

20.python@property

时间:2023-08-16 22:24:02浏览次数:35  
标签:20 python age print property self def 属性

python@property

目录

python的@property是python的一种装饰器,是用来修饰方法的。

作用

我们可以使用@property装饰器来创建只读属性,@property装饰器会将方法转换为相同名称的只读属性,可以与所定义的属性配合使用,这样可以防止属性被修改。让方法可以以属性的形式被访问和调用

  • 保护类的封装特性
  • 使用“对象.属性”的方式操作操作类属性
class Circle:
    def __init__(self, area):
        self.__area = area
        self.__radius=5

    @property
    def area(self):
        return self.__area

    def radius(self):
        return self.__radius


circle = Circle(30)
# 直接通过方法名来访问 area 方法
print("圆的面积是:", circle.area)
# 矩形的面积是: 30

# 类中只包含该方法,那么 area 属性将是一个只读属性。
# 也就是说,在使用 Circle 类时,无法对 area 属性重新赋值
print("圆的半径是:",circle.radius())

circle.area = 90
print("修改后的面积:", circle.area)
---------------------------------------------------------------------------
圆的面积是: 30
圆的半径是: 5 
Traceback (most recent call last):
AttributeError: can't set attribute

property() 函数

语法说明:

property(fget=None, fset=None, fdel=None, doc=None) -> property attribute
  • fget 是获取属性值的方法。
  • fset 是设置属性值的方法。
  • fdel 是删除属性值的方法。
  • doc 是属性描述信息。
class Student:
    def __init__(self):
        self._age = None

    def get_age(self):
        print('获取属性时执行的代码')
        return self._age

    def set_age(self, age):
        print('设置属性时执行的代码')
        self._age = age

    def del_age(self):
        print('删除属性时执行的代码')
        del self._age

    age = property(get_age, set_age, del_age, '学生年龄')


student = Student()
# 注意要用 类名.属性.__doc__ 的形式查看属性的文档字符串
print('查看属性的文档字符串:' + Student.age.__doc__)
# 查看属性的文档字符串:学生年龄

# 设置属性
student.age = 18
# 设置属性时执行的代码

# 获取属性
print('学生年龄为:' + str(student.age))
# 获取属性时执行的代码
# 学生年龄为:18

# 删除属性
del student.age
# 删除属性时执行的代码

@property 装饰器

@property 语法糖提供了比 property() 函数更简洁直观的写法。

  • @property 装饰的方法是获取属性值的方法,被装饰方法的名字会被用做 属性名。

  • @属性名.setter 装饰的方法是设置属性值的方法。

  • @属性名.deleter 装饰的方法是删除属性值的方法。

class Student:
    def __init__(self):
        self._age = None

    @property
    def age(self):
        print('获取属性时执行的代码')
        return self._age

    @age.setter
    def age(self, age):
        print('设置属性时执行的代码')
        self._age = age

    @age.deleter
    def age(self):
        print('删除属性时执行的代码')
        del self._age

student = Student()

设置属性
student.age = 18
# 设置属性时执行的代码

# 获取属性
print('学生年龄为:' + str(student.age))
# 获取属性时执行的代码
# 学生年龄为:18

# 删除属性
del student.age
# 删除属性时执行的代码

标签:20,python,age,print,property,self,def,属性
From: https://www.cnblogs.com/tian777/p/17636360.html

相关文章

  • Python 实现排序算法
    常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。冒泡排序冒泡排序(BubbleSort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复......
  • 2023.8.16
    今天没做什么,主要是栈溢出差不多学完了,想花点时间再把基础打好一点今天去b站找到个pwn的视频,最近打算去看一下其中有关gdb调试的相关东西,恰好我调试相关的东西只会一点最简单的,想更好地去做pwn题,感觉这方面还是要学好。中间应该也会去找一些题目来做考虑到九月有竞赛,我在此之前......
  • Python 与 PHP 项目对接
    在Web开发中,前后端分离已经成为一种趋势。前端使用JavaScript进行交互,后端则使用Python或PHP进行处理。当一个项目需要同时支持前端和后端时,就需要将两个部分进行对接。本文将介绍如何使用Python与PHP项目进行对接。HTTP协议首先,我们需要了解HTTP协议。HTTP(Hypertex......
  • 20230816比赛
    T1矩形Description现在我们在一个平面上画了n个矩形。每一个矩形的两边都与坐标轴相平行,且矩形定点的坐标均为整数。现我们定义满足如下性质的图形为一个块:每一个矩形都是一个块;如果两个块有一段公共的部分,那么这两个块就会形成一个新的块,否则这两个块就是不同的。示......
  • 「Log」2023.8.16 小记
    序幕早上昏迷,九点才到校,少听了四道题,问题不大。点咖啡喝。SAM题也抽象。线段树合并,不会。写个AC自动机板子。\(\color{royalblue}{P3808\【模板】AC\自动机(简单版)}\)板子。\(\text{Link}\)\(\color{royalblue}{P3796\【模板】AC\自动机(加强版)}\)板子。\(\text{Li......
  • 【Python-每日技巧】利用python进行文件上传
    有时候,需要上传文件到对方服务器,可以利用python实现在Python中,可以使用requests库来上传MultipartFile。以下是一个示例代码:importrequestsurl="http://example.com/upload"#替换为实际的上传接口地址#读取要上传的文件withopen("path/to/file.jpg","rb")asfi......
  • 深入探秘 Python 类的常用魔术方法
    魔术方法(MagicMethods),也称为特殊方法或双下划线方法,是Python中一类特殊命名的方法,其名称以双下划线__开头和结尾。这些方法在类的定义中具有特殊的用途,用于控制类的行为,与内置操作符和函数交互,以及实现一些特定的功能。魔术方法使得自定义的类可以模拟内置类型的行为,使其更加强......
  • 2023.3 Idea配置Tomcat环境
    tomcat配置下载tomcat先到官网(......
  • The 2022 ICPC Asia Regionals Online Contest (I) C L A
    The2022ICPCAsiaRegionalsOnlineContest(I)C统计度的大小,算贡献,特判\(n=1\)#include<bits/stdc++.h>usingnamespacestd;constintN=1e6+10;typedeflonglongll;intn,d[N];vector<int>e[N];llres=0;voiddfs(intu,intfrom){ ......
  • python 运行 execjs 出现错误 UnicodeEncodeError: 'gbk' codec can't encode charac
    异常解读该异常的格式一般为:UnicodeEncodeError: 'gbk'codeccan'tencodecharacter'\xfe'inpositio该异常出现的场景为在Windows电脑下使用Pythonexecjs运行指定的JS文件,但JS文件中包含中文。异常解决方案该问题解决需要修改你电脑Python安装目录下 lib......