首页 > 编程语言 >python——面向对象——知识汇总二

python——面向对象——知识汇总二

时间:2024-02-25 22:25:23浏览次数:25  
标签:getname name python 函数 汇总 面向对象 property self 属性

Python property()函数:定义属性

 

我们一直在用“类对象.属性”的方式访问类中定义的属性,其实这种做法是欠妥的,因为它破坏了类的封装原则。

 

正常情况下,类包含的属性应该是隐藏的,只允许通过类提供的方法来间接实现对类属性的访问和操作。


因此,在不破坏类封装原则的基础上,为了能够有效操作类中的属性,类中应包含读(或写)类属性的多个 getter(或 setter)方法,这样就可以通过“类对象.方法(参数)”的方式操作属性,

 

例如:

 

 

 

这种操作类属性的方式比较麻烦,更习惯使用“类对象.属性”这种方式。

Python 中提供了 property() 函数,可以实现在不破坏类封装原则的前提下,让开发者依旧使用“类对象.属性”的方式操作类中的属性。

 

 

class CLanguage:
    #构造函数
    def __init__(self,n):
        self.__name = n
    #设置 name 属性值的函数
    def setname(self,n):
        self.__name = n

    #访问nema属性值的函数
    def getname(self):
        return self.__name

    #删除name属性值的函数
    def delname(self):
        self.__name="xxx"

    #为name 属性配置 property() 函数
    name = property(getname, setname, delname, '指明出处')


#调取说明文档的 2 种方式
#print(CLanguage.name.__doc__)
help(CLanguage.name)


clang = CLanguage("C语言中文网")
#调用 getname() 方法
print(clang.name)

#调用 setname() 方法
clang.name="Python教程"
print(clang.name)

#调用 delname() 方法
del clang.name
print(clang.name)

 

 

 

 

 

 

 

 

 

 不要构造函数也可以,直接set和get方法处理:

 

 

 

 

 

 

 

 

 

 

 

 当然,property() 函数也可以少传入几个参数。以上面的程序为例,我们可以修改 property() 函数如下所示

  1. name = property(getname, setname)

 

这意味着,name 是一个可读写的属性,但不能删除,因为 property() 函数中并没有为 name 配置用于函数该属性的方法。

 

也就是说,即便 CLanguage 类中设计有 delname() 函数,这种情况下也不能用来删除 name 属性。 

同理,还可以像如下这样使用 property() 函数:

  1. name = property(getname)                # name 属性可读,不可写,也不能删除
  2. name = property(getname, setname,delname)             #name属性可读、可写、也可删除,就是没有说明文

 

 

 

 

 

 

 

 ===========================================================================

 

 

 

 

 

 

 

 

Python @property装饰器详解

 

 

 首先讲解装饰器:一个函数可以作为另外一个函数的参数。装饰器接受一个函数,添加一些功能并返回它。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

123

 

123

标签:getname,name,python,函数,汇总,面向对象,property,self,属性
From: https://www.cnblogs.com/xiaobaibailongma/p/18033194

相关文章

  • 图论算法汇总
    图论算法在信息学竞赛中有着非常广泛的应用,也频繁在考试与比赛中作为重要的考察知识.本文汇总并分类了信息学竞赛中的图论算法.1生成树与最短路1.1Prim算法Prim算法可以求出一张图的最小生成树,时间复杂度为\(\mathcal{O}((|V|+|E|)\log|V|)\).memset(dis,0x3f,sizeo......
  • Python数据结构与算法05——二分查找
    二分查找——递归版:defbinarySearch(aimlist,item):#获取列表的长度n=len(aimlist)#如果列表非空ifn>0:#计算中间索引mid=n//2#如果中间元素是目标元素,则找到了ifaimlist[mid]==item:......
  • 加速Python代码的秘密武器,探索Cython的秘密
    首先和大家明确一下这个Cython单词的读法,这个单词Cython以前我也不知道怎么读,老后面要用到这个包的时候,老是不清楚读法,才去搜了下,这个单词是读"赛森",就是前面的cy是读"赛",后面的读法和python后一个读音thon一样。Cython是什么Cython是一个用于将Python代码转换为C或C++代码的编......
  • Airtest:各平台的剪切板功能汇总
    1.前言一直以来,大家都还挺关注 Airtest是否有剪切板功能 的。从Airtest1.3.1版本起,我们新增了Android、iOS设备的剪切板功能,自此,3大平台的剪切板功能就齐全啦。正好趁这个机会,我们给各大平台的剪切板功能做个合集,方便同学们查阅使用~2.Android设备的剪切板功能Android设备的......
  • 测试工程师常用的python库
    大家好,今天给各位小伙伴带来的是测试工程师常用的10个python库,相信有些小伙伴肯定知道一些库,也使用过一些库。下面我们就来聊聊这常用的10个python库,我们主要介绍这些库和这些库的一些应用场景,方便没有接触过的小伙伴知道这些库的作用。个人认为以下10个库是测试工程师最常用的库......
  • 常用的Python代码片段(绘图)
    Proplot绘制具有经纬网的地图importproplotasppltimportcartopyfig,ax=pplt.subplots(proj=['cyl'],ncols=1,nrows=1)ax.add_feature(cartopy.feature.COASTLINE)ax.add_feature(cartopy.feature.BORDERS,linestyle=':',linewidth=0.5)ax.add_featu......
  • Python 相关知识-1
    1.Python内存泄漏和内存溢出是两种不同的问题,但它们都与内存管理有关.内存泄漏是指在使用动态分配的内存时,由于某些原因导致某些已分配的内存块无法被释放,从而使得程序占用的内存不断增加,最终导致内存耗尽。在Python中,内存泄漏可能由多种原因引起,例如全局变量、闭包、循环......
  • Python中生成器和迭代器的概念及两者区别
    本文详细介绍Python中生成器和迭代器的概念及两者区别。并通过一个案例分析两者在实际应用中的性能差异。 生成器生成器是一种特殊类型的迭代器,它使用函数和yield关键字定义,可以像普通函数一样调用和执行。生成器在每次迭代时产生一个值,并在下一次迭代时恢复执行。 在......
  • 【Python】 回文数的四种解法
    回文数就是指整数倒过来和原整数相等。1234Example1:  Input:121Output:true12345Example2:  Input:-121Output:falseExplanation:Fromlefttoright,itreads-121.Fromrighttoleft,itbecomes121-.Therefore......
  • python——面向对象——知识汇总
    面向对象技术简介类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法:类中定义的函数。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。......