Python中类的属性的访问控制
因为自己是做.NET的,之前有学习过Python,喜欢这门语言的很多特性,最近又不时看了一会儿,将自己的感受分享给大家,其中也难免会用C#的角度看Python的语法,主要还是讲下Python中类中对属性的访问。
讲到属性访问,都能想到公有,私有,受保护,C#的方法是public private protected,Python中也真心让自己感觉到难以理解。
首先定义一个类(博客园对python代码没着色,大家看图吧)

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

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

在setRegion方法中,使用City.来找到region并给它赋值,那为什么使用nb和sz也能找到这个region,而且值是一样的呢,是不是有点像C#静态属性,是使用类名访问的,但在Python中又可以使用实例来访问,这是因为类和实例都有各自的一个作用域,当要在实例作用域上找一个属性时,如果找不到,则用向上去类作用域中找。自然,可以想象在City类中,name,location,region属于类作用域,但在实例作用域中出存在name和location属性。
可以简单地说,类作用域中的属性是所有实例都能访问到,而且修改后,其它实例也会影响,但究其原因是实例作用域找不到,找到了类作用域。
现在静态语言中的那一套真心不适用了,但引用作用域后,对Python的访问行为多少还是了解了点。
那来说说下私有呗

使用两个下划线来表示这是一个私有的属性,私有属性也涵盖类的私有属性和实例的私有属性,执行最后两个print语句时,程序报错。书中也讲到私有属性其实也是可以被访问到,Python解释器使用改属性名称来阻止实例去访问那些属性。
Python中类的属性的访问控制的更多相关文章
- python中类中属性和方法的具体定义方法和使用
1. Python中类中特性分成属性和方法 属性和方法都分为私有和公有的,私有的只可以在本类中使用外部是无法访问的 2. 定义属性(成员变量)的语法格式(公有属性/私有属性) class 类名: de ...
- python中类的属性(class attribute)的解释
python中的类叫 class object,类的实例叫instance object. 类 Class Objects 类拥有两种操作,1.类属性 attribute references 2.实 ...
- Python中的属性管理
Python管 理属性的方法一般有三种:操作符重载(即,__getattr__.__setattr__.__delattr__和 __getattribute__,有点类似于C++中的重载操作符).p ...
- Python class的属性访问控制和内建函数重写实现高级功能以及@property
一.类属性的访问控制 Python Class确实是博大精深,我们还是来温习一下属性的访问控制作为开(fu)场(xi). 首先_varname是可以访问的,__varname是不能直接访问(原理是__ ...
- Python中类的方法属性与方法属性的动态绑定
最近在学习python,纯粹是自己的兴趣爱好,然而并没有系统地看python编程书籍,觉得上面描述过于繁琐,在网站找了一些学习的网站,发现廖雪峰老师的网站上面的学习资源很不错,而且言简意赅,提取了一些 ...
- Python: 浅淡Python中的属性(property)
起源:项目过程中需要研究youtube_dl这个开源组件,翻阅其中对类的使用,对比c#及Delphi中实现,感觉Python属性机制挺有意思.区别与高级编程语言之单一入口,在类之属性这一方面,它随意的 ...
- Python 中的属性访问与描述符
在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个name属性,那便可以使用foo.name对此属性进行访问.一般而言,点(. ...
- Python中的属性访问与描述符
Python中的属性访问与描述符 请给作者点赞--> 原文链接 在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个nam ...
- python中类的定义、实例化、封装以及私有变量/方法
1. 定义类 python中定义一个类的格式如下: class MyClass(object): def __init__(self,data1,data2): self.__data1=data1 ...
随机推荐
- 知识记录:ASP.NET 应用程序生命周期概述及Global.asax文件中的事件
IIS7 ASP.NET 应用程序生命周期概述 https://msdn.microsoft.com/zh-cn/library/bb470252(v=vs.100).aspx HttpApplica ...
- 如何使用socket进行java网络编程(二)
通过在如何使用socket进行java网络编程(一)中程序的编写,可以总结出一些常用的java socket编程的范例来. ServerSocket server = new ServerSocket ...
- Neutron 架构图
与 OpenStack 其他服务一样,Neutron 采用的是分布式架构,包括 Neutorn Server.各种 plugin/agent.database 和 message queue. Neu ...
- 【新题】OCP 062题库出现很多新题-6
6.Which four statements are true about database instance behavior? A) Redo log files can be renamed ...
- 《Python黑帽子:黑客与渗透测试编程之道》 Web攻击
Web的套接字函数库:urllib2 一开始以urllib2.py命名脚本,在Sublime Text中运行会出错,纠错后发现是重名了,改过来就好: #!/usr/bin/python #coding ...
- Divide and Conquer-169. Majority Element
Given an array of size n, find the majority element. The majority element is the element that appear ...
- Python小白学习之路(十二)—【前向引用】【风湿理论】
前向引用 风湿理论(函数即变量) 理论总是很抽象,我个人理解: 代码从上到下执行,一旦遇到定义的函数体,内存便为其开辟空间,并用该函数的名字作为一个标识但是该函数体内具体是什么内容,这个时候并不着急去 ...
- 【poj1850】 Code 数位dp+记忆化搜索
题目大意:给你一个字符串,问你这个字符串的rank,如果这个字符串不合法,请直接输出0.(一个合法的字符串是对于∀i,有c[i]<c[i+1]) 字符串s的rank的计算方式:以字符串长度作为第 ...
- AngularJS自定义Directive
(编辑完这篇之后,发现本篇内容应该属于AngularJS的进阶,内容有点多,有几个例子偷懒直接用了官方的Demo稍加了一些注释,敬请见谅). 前面一篇介绍了各种常用的AngularJS内建的Direc ...
- python3和pip3安装和问题解决
python3安装前,最好先安装下依赖包: yum install -y openssl-devel yum install -y openssl yum install -y zlib-devel ...