首页 > 其他分享 >100:@property装饰器_get和set方法

100:@property装饰器_get和set方法

时间:2022-11-19 16:56:46浏览次数:63  
标签:salary __ set get python self emp1 100 property

###@property 装饰器

@property 可以将一个方法的调用方式变成“属性调用”。下面是一个简单的示例,让大家体会一下这种转变:

# 简单测试@property
class Employee:

    @property
    def salary(self):
        return 30000


emp1 = Employee()
print(emp1.salary)  # 打印 30000
print(type(emp1.salary))  # 打印<class 'int'>#emp1.salary() #报错:TypeError: 'int' object is not callable

# emp1.salary =1000 #@property 修饰的属性,如果没有加 setter 方法,则为只读属性。此处修改报错:AttributeError: can't set attribute

输出结果:

D:\work\python\three\venv\Scripts\python.exe D:\work\python\three\mypy12.py 
30000
<class 'int'>

@property 主要用于帮助我们处理属性的读操作、写操作。对于某一个属性,我们可以直接通过:
     emp1.salary = 30000
如上的操作读操作、写操作。但是,这种做法不安全。比如,我需要限制薪水必须为 1-10000的数字。这时候,我们就需要通过 getter、setter 方法来处理。

# 测试@property
class Employee:
    def __init__(self, name, salary):
        self.name = name
        self.__salary = salary

    @property  # 相当于 salary 属性的 getter 方法
    def salary(self):
        print("月薪为{0},年薪为{1}".format(self.__salary, (12 * self.__salary)))
        return self.__salary

    @salary.setter
    def salary(self, salary):  # 相当于 salary 属性的 setter 方法
        if 0 < salary < 1000000:
            self.__salary = salary
        else:
            print("薪水录入错误!只能在 0-1000000 之间")


emp1 = Employee("高淇", 100)
print(emp1.salary)

emp1.salary = -200

输出结果:

D:\work\python\three\venv\Scripts\python.exe D:\work\python\three\mypy13.py 
月薪为100,年薪为1200
100
薪水录入错误!只能在 0-1000000 之间

###属性和方法命名总结

_xxx:保护成员,不能用“from module import * ”导入,只有类对象和子类对象能访问这些成员。
__xxx__:系统定义的特殊成员
__xxx: 类中的私有成员,只有类对象自己能访问,子类对象也不能访问。(但,在类外部可以通过“对象名. _类名__xxx”这种特殊方式访问。Python 不存在严格意义的私有成员)

注:再次强调,方法和属性都遵循上面的规则。

###类编码风格

1. 类名首字母大写,多个单词之间采用驼峰原则。
2. 实例名、模块名采用小写,多个单词之间采用下划线隔开。
3. 每个类,应紧跟“文档字符串”,说明这个类的作用。
4. 可以用空行组织代码,但不能滥用。在类中,使用一个空行隔开方法;模块中,使用两个空行隔开多个类。

标签:salary,__,set,get,python,self,emp1,100,property
From: https://www.cnblogs.com/yuanzijian/p/16906432.html

相关文章

  • java——集合——Set集合——哈希值
    哈希值哈希值:是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来得到地址,不是数据实际存储的物理地址)在Object类有一个方法,可以获取对......
  • ASEMI代理艾赛斯二极管DSA300I100NA,肖特基DSA300I100NA
    编辑-Z艾赛斯硅肖特基二极管DSA300I100NA参数:型号:DSA300I100NA最大重复反向阻断电压(VRRM):100V反向电流、漏极电流(IR):3mA正向电压降(VF):0.99V平均正向电流(IF):300A总功耗(Pt......
  • Git - revert 和 reset 命令
    Gitrevert命令该命令会重新进行一次新的提交,以达到撤销某次提交的目的。如果您已经将commit链推送到远端仓库,则revert是一种非常友好的方式。使用场景撤回commit......
  • settings配置文件和源码
    BASE_DIR:用来在项目中构建路径SECRET_KEY:项目生成时候用的秘钥DEBUG:调试模式,在写代码的时候打开,投入使用了就不用了ALLOWED_HOSTS=['']:运行那些ip来进行访问......
  • ES6中setTimeout函数的this
    在编程的过程中有同学遇到不太清楚ES6中​​this​​指向的问题,代码抽象如下:functionmyFunction(){varmthis=this;setTimeout(()=>{//this=mthisco......
  • ES6中setTimeout函数的this
    在编程的过程中有同学遇到不太清楚ES6中this指向的问题,代码抽象如下:functionmyFunction(){varmthis=this; setTimeout(()=>{//this=mthiscons......
  • Redis学习(五)之redis中的数据类型之Set类型
      1、set是字符串无序集合,可以执行交集,并集,差集运算。 2、sismember可以判断元素是否存在。  1、比如给新闻添加标签。就可以在点开新闻的时候,看到它有哪些标签......
  • 关于裁剪区域SetClip的初步理解
    先看一个关于setclip用法的初步使用的例子:1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSystem.Draw......
  • How to setup Visual Studio Code to detect and set the correct encoding on file o
    HowtosetupVisualStudioCodetodetectandsetthecorrectencodingonfileopen回答1Addguidebyimage:File>>Preferences>>SettingsEnterautoGuess......
  • EnumSet 和 EnumMap 简单理解
    在阅读《EffectiveJava》时,看到了EnumSet,就去查了下。EnumSet首先看一下类图:内部实现上,每个EnumSet内容都表示为位矢量(区别于HashSet底层使用HashMap实现),一般(......