首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python @property

prerequisite: Python装饰器 在面向对象编程中,我们通常希望一个类的属性具有一定程度的封装性,其他对象只能通过定义好的接口访问这些属性,而不能够随意修改。...在Python中如果我们不希望类的方法被修改,可以使用@Property装饰器。它可以修饰方法,将该被修饰的方法转为相同名称的只读属性;也可以与属性配合使用,来防止属性被修改。...即@Property装饰器常见使用场景有两个: 将方法转化为同名属性 与类的属性配合使用,防止属性被修改 将方法转化为同名属性 class Data: @property def printnum_with_property...print(data.printnum_without_property()) print(data.printnum_with_property) print(data.printnum_with_property...()) 10 print(data.printnum_with_property) ---> 11 print(data.printnum_with_property()) TypeError

43310
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    python特性--property

    python提供了一样东西:特性(property)。property避免了以上的问题,使得调用类的人只要知道类怎么用就可以了,而不用了解它是怎么实现的。这很好的实现了面向对象语言的封装性。...我下面以一个例子说明property的用法。...从property的参数可以知道,有一个是get_money,就会我们上面想获得的付款金额。通过将get_money传入property函数获得结果赋值给money。...一个property函数就可以有如此大的威力,即可以正向操作,由可以反向操作。那么它是如何实现的呢?   ...特性property是一个强大的函数,虽然它的内部实现原理很简单,但在实际应用中,笔者认为还是很有用处的。就如我上面所说的需求下,用property可以很好地解决一些问题。

    59320

    Python中的property类和@property装饰器

    在Python的类中,为了避免使用者直接在类的外部操作属性和方法,我们可以将属性和方法设置成私有属性和私有方法。 如果我们需要访问私有属性和私有方法,可以用包含get/set的方法来间接访问。...参考:Python类中的私有属性和私有方法 get/set是通过方法的方式来间接访问属性和方法,接下来我们介绍通过属性的方式来访问属性和方法:property。 ?...一、property类的使用 property的中文意义就是属性、性质,在python中主要用来为属性操作提供便利。...在Python中,提供了一个叫做property的类,通过创建property类的对象,来将私有属性设置成普通的属性,可以不再使用属性的get方法的调用方式,而像普通的公有属性一样去使用属性。...二、@property装饰器的使用 Python语法中,装饰器的作用是提供装饰的功能,在不改变原来函数功能的基础上,添加新的功能。 这种形式被称为语法糖。

    1K40

    说说Python中的property

    有关property property是Python中的一类装饰器,可以把某个类函数变成只读属性。...不过这种操作,对于Python来说,似乎有一种脱裤子放屁的感觉,不用property,一样能够正常的获取类属性,比如这样 class Student(object): def __init__(...类型检查 Python是一个弱类型的语言,某个变量可以随便赋值,即使原来是字符串,也可以重新赋值成数值类型。 还是上面那个例子,如果这个学生类,我要确保姓名和年龄字段必须传对类型。...property的其他应用 当然,property如果只有这么功能,那么使用的意义其实不大,还有其他实用的点,比如懒加载,数据缓存。...这里参考了Python Cookbook中的一个用法。

    54920

    python 面向对象技巧 @property

    python 面向对象技巧 @property ---- 在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score...对于追求完美的Python程序员来说,这是必须要做到的! 还记得装饰器(decorator)可以给函数动态加上功能吗?对于类的方法,装饰器一样起作用。...Python内置的@property装饰器就是负责把一个方法变成属性调用的: class Student(object): @property def score(self):..._score = value @property的实现比较复杂,我们先考察如何使用。...把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建了另一个装饰器@score.setter,负责把一个setter方法变成属性赋值,于是,我们就拥有一个可控的属性操作

    45520

    Python高级技巧:lazy property

    Python 对象的延迟初始化是指,当它第一次被创建时才进行初始化,或者保存第一次创建的结果,然后每次调用的时候直接返回该结果。延迟初始化主要用于提高性能,避免浪费计算,并减少程序的内存需求。...这就是lazy property。 lazy property 实现延迟初始化有两种方式,一种是使用python描述符,另一种是使用@property修饰符。...当我们第一次执行c.area时,python解释器会先从c._dict_中进行查找,没有找到,就从Circle._dict_中进行查找,这时因为area被定义为描述符,所以调用__get方法。...不太懂python描述符的话,可以参考Descriptor HowTo Guide 方式2 1def lazy_property(func): 2 attr_name = "_lazy_" +...11{'radius': 4} 12evalute 13after first visit 14{'_lazy_area': 50.24, 'radius': 4} 推荐阅读 20 个超棒的数据科学 Python

    1.7K20

    python中的@property作用

    参考链接: Python property() 1、为什么要使用property这个单词  我们首先来分析一下为什么但是龟哥会用property这个单词,而不用foo,bar这样的单词呢,想必一定有他的想法...通过谷歌翻译查到,property的意思是属性。   ...property ——> 属性  虽然我们不能猜测出(当然我不提倡乱猜)它的具体意思,但是我们可能应该想到,被他修饰的应该和属性的意思有些许联系的。 ...显然通过property很好的解决了这个问题,既然我们可以阅读代码时,一眼就能想到这是一个属性值(或者我们想要的值而已),还很好的避免的传参的问题。 ...到这里我们也大概明白了龟哥为什么用property这个单词了吧  3、使用property的注意点  被property修饰的方法只有一个参数,self它必须要有返回值

    70820

    Python - 面向对象编程 - @property

    方法 不破坏类封装原则的基础上,操作实例属性 写过 java 的话应该知道,java 的类可以自动生成对属性的操作方法,一个是 get,另一个是 set(一般称为 getter、setter 方法) python...__name = "xxx" # property() name = property(getName, setName, delName, "小菠萝测试笔记") # 调用说明文档...__age # property() name = property(getName, setName, delName, "小菠萝测试笔记") # 没有 fdel、doc...= property(getName, setName,delName) #name属性可读、可写、也可删除,就是没有说明文档 @property 是一个装饰器,相当于 getter 装饰器 可以使用...@property 来创建只读属性,将一个实例方法变成一个相同名称的只读实例属性,这样可以防止属性被修改 代码栗子 # @property class PoloBlog: def __init

    30120
    领券