因为自己是做.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解释器使用改属性名称来阻止实例去访问那些属性。

最新文章

  1. CFURLCreateStringByAddingPercentEscapes与CFURLCreateStringByReplacingPercentEscapesUsingEncoding
  2. XPath Checker和Firebug安装与使用
  3. C#利用WIN32实现按键注册
  4. ASP.NET 5中的那些K
  5. Computer architecture Computer organization
  6. unique踢出相同元素
  7. java实现的MySQL自动备份和还原(struts2+Hibernate)---兼容 window+Linux
  8. 从客户端(&)中检测到有潜在危险的 Request.Path 值解决方案
  9. C++ new operator, delete operator, operator new, operator delete, new placement
  10. CF 338 D GCD Table(CRT)
  11. .net mvc下的Areas和小写Url
  12. 【IOS开发笔记01】学生管理系统(上)
  13. iOS用户行为追踪——无侵入埋点
  14. [NewLife.XCode]对象字典缓存(百万军中取敌首级)
  15. win7系统删除打印机后刷新又出现怎么办
  16. laravel接值 get post
  17. 【Gym 100812C】Story of Princess (走完图所有边)
  18. linux软件管理 源码包
  19. 面试问卷-java&Oracle
  20. Spark中文文本分析建模

热门文章

  1. LayaAir从入门到放弃
  2. ASP.NET Core 2 学习笔记(六)MVC
  3. MongoDB的下载、安装与部署方法
  4. 无废话网页重构系列——(3)Web重构前的分析
  5. 【转】Lucene工作原理——反向索引
  6. JQuery Mobile - 解决动态更新页面内容,CSS失效问题!
  7. Python 读取大文件的方式
  8. 深入理解 js this 绑定机制
  9. Jmeter之Bean shell使用
  10. WebDriverAPI(3)