Python中类的属性的访问控制

时间:2023-02-17 11:42:16

  因为自己是做.NET的,之前有学习过Python,喜欢这门语言的很多特性,最近又不时看了一会儿,将自己的感受分享给大家,其中也难免会用C#的角度看Python的语法,主要还是讲下Python中类中对属性的访问。

  讲到属性访问,都能想到公有,私有,受保护,C#的方法是public private protected,Python中也真心让自己感觉到难以理解。

  首先定义一个类(博客园对python代码没着色,大家看图吧)

  Python中类的属性的访问控制

  就个人认识,不一定对,觉得Python是一门动态的语言,很多属性都是动态加上去,如name属性,当调用到这个setName方法时,Room类的实例才会拥有name属性,就像图中一样,如果在setName调用后,没有去调用setSize,而在display方法中又使用到了size属性,则程序报错,这里个人把这种属性当公开的吧,因为类的实例确实能访问到。

  再来张图

  Python中类的属性的访问控制

  如上图中的name和location属性,在构造函数__init__中传入,给这两个属性赋值,注意这个self,其实到现在我出说不清name和location是什么属性了,它们即可以是实例属性,也可以是类属性,使用变量nb和sz可以访问到,使用类名City也可以方法到,只不过用类名访问到的是空的字符串。如果改一些的话

  Python中类的属性的访问控制

  在setRegion方法中,使用City.来找到region并给它赋值,那为什么使用nb和sz也能找到这个region,而且值是一样的呢,是不是有点像C#静态属性,是使用类名访问的,但在Python中又可以使用实例来访问,这是因为类和实例都有各自的一个作用域,当要在实例作用域上找一个属性时,如果找不到,则用向上去类作用域中找。自然,可以想象在City类中,name,location,region属于类作用域,但在实例作用域中出存在name和location属性。

  可以简单地说,类作用域中的属性是所有实例都能访问到,而且修改后,其它实例也会影响,但究其原因是实例作用域找不到,找到了类作用域。

  现在静态语言中的那一套真心不适用了,但引用作用域后,对Python的访问行为多少还是了解了点。

  那来说说下私有呗

  Python中类的属性的访问控制

  使用两个下划线来表示这是一个私有的属性,私有属性也涵盖类的私有属性和实例的私有属性,执行最后两个print语句时,程序报错。书中也讲到私有属性其实也是可以被访问到,Python解释器使用改属性名称来阻止实例去访问那些属性。

Python中类的属性的访问控制的更多相关文章

  1. python中类中属性和方法的具体定义方法和使用

    1. Python中类中特性分成属性和方法 属性和方法都分为私有和公有的,私有的只可以在本类中使用外部是无法访问的 2. 定义属性(成员变量)的语法格式(公有属性/私有属性) class 类名: de ...

  2. python中类的属性(class attribute)的解释

    python中的类叫 class object,类的实例叫instance object. 类 Class Objects 类拥有两种操作,1.类属性 attribute references 2.实 ...

  3. Python中的属性管理

    Python管 理属性的方法一般有三种:操作符重载(即,__getattr__.__setattr__.__delattr__和 __getattribute__,有点类似于C++中的重载操作符).p ...

  4. Python class的属性访问控制和内建函数重写实现高级功能以及@property

    一.类属性的访问控制 Python Class确实是博大精深,我们还是来温习一下属性的访问控制作为开(fu)场(xi). 首先_varname是可以访问的,__varname是不能直接访问(原理是__ ...

  5. Python中类的方法属性与方法属性的动态绑定

    最近在学习python,纯粹是自己的兴趣爱好,然而并没有系统地看python编程书籍,觉得上面描述过于繁琐,在网站找了一些学习的网站,发现廖雪峰老师的网站上面的学习资源很不错,而且言简意赅,提取了一些 ...

  6. Python: 浅淡Python中的属性(property)

    起源:项目过程中需要研究youtube_dl这个开源组件,翻阅其中对类的使用,对比c#及Delphi中实现,感觉Python属性机制挺有意思.区别与高级编程语言之单一入口,在类之属性这一方面,它随意的 ...

  7. Python 中的属性访问与描述符

    在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个name属性,那便可以使用foo.name对此属性进行访问.一般而言,点(. ...

  8. Python中的属性访问与描述符

    Python中的属性访问与描述符 请给作者点赞--> 原文链接 在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个nam ...

  9. python中类的定义、实例化、封装以及私有变量/方法

    1.  定义类 python中定义一个类的格式如下: class MyClass(object): def __init__(self,data1,data2): self.__data1=data1 ...

随机推荐

  1. xcode5-ios7-如何添加120x120、152x152、76x76图标

    以120x120为例: 添加Icon_120x120.png-->.plist添加Icon files-->App Icons自动变化 1. 2. 3. ================= ...

  2. MongoDB日志过大怎么办?

    MongoDB 日志文件过大怎么办? MongoDB的日志文件在设置 logappend=true 的情况下,会不断向同一日志文件追加的,时间长了,自然变得非常大. 解决如下:(特别注意:启动的时候必 ...

  3. 微信小程序开发常见问题分析

    距离微信小程序内测版发布已经有十几天的时间了,网上对微信小程序的讨论也异常火爆,从发布到现在微信小程序一直占领着各种技术论坛的头条,当然各种平台也对微信小程序有新闻报道,毕竟腾讯在国内影响力还是很大的 ...

  4. Spark Streaming揭秘 Day11 Receiver Tracker的具体实现

    Spark Streaming揭秘 Day11 Receiver Tracker的具体实现 ReceiverTracker是运行在Driver上Receiver管理程序,今天让我们深入学习一下. 核心 ...

  5. javaCV开发详解之3:收流器实现,录制流媒体服务器的rtsp/rtmp视频文件(基于javaCV-FFMPEG)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

  6. css的padding和border问题

    第一步:先跟据需求定义一个div,要求width为300px,height为300px: 第二步:给该div添加一个边框,要求实线,宽度10px,粉色: 第三步:给该div再设置20px的内边距: 我 ...

  7. Python分析微信好友性别比例和省份城市分布比例

    如需转发请注明:小婷儿的博客:https://www.cnblogs.com/xxtalhr/p/10642241.html 一.安装模块 pip install itchat pip install ...

  8. wifi实现串口透传

    环境: 串口服务器Ip:172.16.1.11 串口客户机ip:172.16.1.12 一.网络连接示意图 二.串口服务器的配置 参考:ser2net的编译及测试 三.串口客户端的配置 实际上这是一个 ...

  9. 即用了 测试脚本里面的 类的值,又继承了 unittest类 使用他的断言方法 (接口自动化 数据分离 变量相互调用 看这里)

  10. django之block extend标签

    class ExtendsNode(Node): must_be_first = True context_key = 'extends_context' def __init__(self, nod ...