首页
学习
活动
专区
圈层
工具
发布

封装,封装的原理,Property ,setter ,deleter

1,封装 ## 什么是封装 what 对外隐藏内部的属性,以及实现细节,并给外部提供使用的接口 学习封装的目的:就是为了能够限制外界对内部数据的方法 注意 :封装有隐藏的意思,但不是单纯的隐藏 python...: ''' python 是通过变形的方式来实现的封装 如何变形 : 在名称带有双下划线开头的变量名字前添加_类名 如:_Person_id_card 当然通过变形后的名字可以直接访问被隐藏的属性 ,...,setter ,deleter Property 作用 : 将一个方法伪装成普通属性 为什么用 property : 希望将访问私有属性和普通属性的方式变得一致 与property相关的两个装饰器...  property装饰器:就是用来将一个方法伪装成属性,可以直接通过点来调用 ''' ''' property的另一种使用场景,计算属性 什么是计算属性: 一个属性它的值不是固定死的...这对于使用者而言太麻烦了 # 一个用来管理动物的方法 只要你传入是一个动物 我就按照动物的标准来使用 完全不用考虑你具体是什么类型 def management_animal(animal)

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

    Python中property的使用技巧

    property属性 一种用起来像是使用实例属性一样的特殊属性,可以对应于某个方法 既要保护类的封装特性,又要让开发者可以使用 对象.属性 的方式操作方法,@property 装饰器,可以直接通过方法名来访问方法...object类 以python2、3执行此程序的结果不同,因为只有在python3中才有@xxx.setter @xxx.deleter """ @property def...,其对应被 @property 修饰的方法 新式类中的属性有三种访问方式,并分别对应了三个被@property、@方法名.setter、@方法名.deleter 修饰的方法 由于新式类中具有三种访问方式...对象的类属性,当使用类属性的方式创建 property 属性时,旧式类 和 新式类无区别 class Foo: def get_bar(self): return '...装饰器的在 旧式类中只有 @property , 没有@method.setter 和 @method.deleter,新式类则两种都可以使用。

    1.5K00

    Python:@property装饰器的使用

    参考链接: Python @property装饰器 @property:(把方法变成属性调用)  Python内置的@property装饰器就是负责把一个方法变成属性调用的 Python允许我们在程序中手动设置异常...,使用 raise 语句即可 把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建了另一个装饰器@score.setter,负责把一个setter方法变成属性赋值...,于是,我们就拥有一个可控的属性操作  # 例1:学生分数设置和获取 class Student(object):     @property     def score(self):        ...方法就是一个只读属性  # 例2:学生生日的设置和获取 class Student(object):     @property     def birthday(self):         return...width和height属性,以及一个只读属性resolution  # 例3:计算长方形的面积 class Screen(object):     @property     def width(self

    69320

    Python内置函数property()使用实例

    self.size = value def delSize(self): print('delSize') del self.size x = property...sx.size) AttributeError: 'Shuxing' object has no attribute 'size' Process finished with exit code 1 property...()函数中的三个函数分别对应的是获取属性的方法、设置属性的方法以及删除属性的方法,这样一来,外部的对象就可以通过访问x的方式,来达到获取、设置或删除属性的目的。...当需要更改上例中的getSize、setSize或delSize函数的名称时,如果这些方法是作为接口让用户调用的,那么对用户而言就要修改自己调用的方法名,很麻烦,使用了proprty()后,用户就不需担心这种问题了...,第二个参数字符串(属性名称),第三个参数是需要设置的属性对应的值; delattr():删除对象中指定的属性,第一个参数是对象,第二个参数需要删除的指定属性的名称。

    841100

    Python中的property类和@property装饰器

    在Python的类中,为了避免使用者直接在类的外部操作属性和方法,我们可以将属性和方法设置成私有属性和私有方法。 如果我们需要访问私有属性和私有方法,可以用包含get/set的方法来间接访问。...一、property类的使用 property的中文意义就是属性、性质,在python中主要用来为属性操作提供便利。...在Python中,提供了一个叫做property的类,通过创建property类的对象,来将私有属性设置成普通的属性,可以不再使用属性的get方法的调用方式,而像普通的公有属性一样去使用属性。...这样就完全隐藏了内部的实现细节。 ? 二、@property装饰器的使用 Python语法中,装饰器的作用是提供装饰的功能,在不改变原来函数功能的基础上,添加新的功能。 这种形式被称为语法糖。...3.如果一个属性同时有set/get方法,那么要先实现@property对获取方法的定义,再实现设置方法的定义,定义set方法时使用 @xxx.setter装饰,xxx要和获取方法名保持一致。

    1.1K40

    说说Python中的property

    有关property property是Python中的一类装饰器,可以把某个类函数变成只读属性。...通过这种方式可以确保这个类在使用的时候,每个字段都是特定的类型。 property的其他应用 当然,property如果只有这么功能,那么使用的意义其实不大,还有其他实用的点,比如懒加载,数据缓存。...我们日常工作中,用到的类成员可能有非常多,比如请求了某个接口回来的数据可能有十几个字段,每个字段都单独写一个property,再写上对应的setter,delete装饰器方法,那真的是非常蠢。...,在setter数据的时候对类型进行检查....但是,如果你的工程是一个比较大型的工程,有很多外部系统的交互,那么使用property这类的处理方式,则是磨刀不误砍柴工,它可以确保你在使用这些数据的时候,类型是一致的,也能减少很多重复的代码编写,同时在多人协同的工作中

    60220

    python中的@property作用

    参考链接: Python property() 1、为什么要使用property这个单词  我们首先来分析一下为什么但是龟哥会用property这个单词,而不用foo,bar这样的单词呢,想必一定有他的想法...通过谷歌翻译查到,property的意思是属性。   ...property ——> 属性  虽然我们不能猜测出(当然我不提倡乱猜)它的具体意思,但是我们可能应该想到,被他修饰的应该和属性的意思有些许联系的。 ...(通过方法获得一个属性值),下面我们来尝试使用property来获得 方法二  class Person(object):     def __init__(self):         self.height...到这里我们也大概明白了龟哥为什么用property这个单词了吧  3、使用property的注意点  被property修饰的方法只有一个参数,self它必须要有返回值

    76120

    Python 中property & eval()的妙用

    这是无量测试之道的第167篇原创 学习过Java 编程语言的小伙伴,应该都知道在Java 语言学习过程中会学到类属性的getter & setter 方法。...那么在Python 中是否也有类似的方法呢?答案是,有的。 今天的分享内容是:如何使用@property 装饰器去实现Python 中的getter & setter 方法。...1、Python 内置有三大装饰器: @staticmethod(静态方法) @classmethod(类方法) @property(描述符) 其中@property 则是一个非常好用的语法糖(语法糖指那些没有给计算机语言添加新功能...@property 最大的好处就是在类中把一个方法变成属性调用,是Python 内置的功能,常用来修饰类方法,用于以访问属性的方式调用函数。...中定义只读属性 在Python 中定义只读属性非@property莫属,而定义只读属性也很简单:以需要定义的属性为方法名(如第26行:将age 属性定义为方法),在该方法上加上内置装饰器@property

    64910

    盘点JavaScript中getter()和setter()函数的使用

    一、前言 有两种类型的属性。 第一种是 数据属性。已经知道如何使用它们了。到目前为止,使用过的所有属性都是数据属性。 第二种类型的属性是新东西。...它们本质上是用于获取和设置值的函数,但从外部代码来看就像常规属性。 二、Getter 和 setter 访问器属性由 “getter” 和 “setter” 方法表示。...四、更聪明的 getter/setter Getter/setter 可以用作“真实”属性值的包装器,以便对它们进行更多的控制。...五、兼容性 访问器的一大用途是,它们允许随时通过使用 getter 和 setter 替换“正常的”数据属性,来控制和调整这些属性的行为。...六、总结 本文基于JavaScript基础,介绍了getter 和 setter函数的使用。对于其中的属性,通过案例的样式,运行效果图的展示,进行详细的讲解。

    2.1K11

    浅析Python装饰器中的@property

    一、使用@property优点 将类方法转换为类属性,可以用来直接获取属性值或者对属性进行赋值。...Python 提供了 property 装饰器,被装饰的方法,可以将其『当作』属性来用。...二、@property的力量 python处理上述问题的方法是使用property。可以这样来实现它。...temperature属性是一个属性对象,它提供了与此私有变量的接口。 三、深入了解property 在Python中,property()是一个内置函数,用于创建并返回属性对象。...注: 实现是制作属性的简单方法和推荐方法。在Python中寻找属性时,很可能会遇到这些类型的构造。 四、总结 本文基于Python基础,介绍了@property 如何把方法变成了属性。

    68420

    Python中类-带括号与不带括号的区别

    所以一个类下面可以有多个方法和多个属性,属性可以只属于某个方法,也可以是全局的。   类的创建   python3创建类的方式有两种,一种带括号,一种不带括号。...创建类的时候,可以不带括号,也可以带,也可以显示继承object,如果带个()空括号,其实也是隐士的继承了object。...这三种方式是相等的。   赋值   上面已经讲了类的创建,在讲类的实例化之前,先说一下赋值。   Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。...在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。   等号(=)用来给变量赋值。   ...上面的结果告诉我们:python的类,带括号是实例化,不带括号是赋值。(记住这个)   总结  以上内容是一个简单的知识点,小知识点容易被忽略,不清楚的可以再复习一次。

    3.1K60

    python @property的用法及含义全面解析

    在接触python时最开始接触的代码,取长方形的长和宽,定义一个长方形类,然后设置长方形的长宽属性,通过实例化的方式调用长和宽,像如下代码一样。...,__init__ 中定义的属性是可变的,换句话说,是使用一个系统的所有开发人员在知道属性名的情况下,可以进行随意的更改(尽管可能是在无意识的情况下),但这很容易造成严重的后果。...= input_width @property def height(self): return self.true_height @height.setter #与property定义的方法名要一致...本文转自:https://www.jb51.net/article/134148.htm在接触python时最开始接触的代码,取长方形的长和宽,定义一个长方形类,然后设置长方形的长宽属性,通过实例化的方式调用长和宽...= input_width @property def height(self): return self.true_height @height.setter #与property定义的方法名要一致

    2.6K10

    Python3中的特性-----Property介绍

    Python的Property详细档案 今天我们就来好好聊聊Python3里面的Property 特性的引入 特性和属性的区别是什么? 在python 中 属性 这个 实例方法, 类变量 都是属性....特性: property 这个是指什么? 在不改变类接口的前提下使用存取方法 (即读值和取值) 来修改数据的属性。什么意思呢?...Property的两种写法 第一种写法 使用 装饰器 property 来修饰一个方法 # 方法1 class Animal: def __init__(self, name):...总结 python的特性算是python的高级语法,不要因为到处都要用这个特性的语法.实际上大部分情况是用不到这个语法的. 如果代码中,需要对属性进行检查就要考虑用这样的语法了....其实更好的做法对属性检查可以使用描述符来完成. 描述符是一个比较大的话题,本文章暂未提及,后续的话,可能 会写一下 关于描述的一些用法 ,这样就能更好的理解python,更加深入的理解python.

    84930
    领券