python2.7学习笔记(9) ——面向对象编程
2015-09-03 15:33
513 查看
类和实例
class Student(object): pass
类名通常以大写字母开头的单词
括号里表示继承哪个类,没有合适的继承类就写object,因为所有的类最终都会继承object这个类
类中定义的函数第一个参数永远是实例变量self,并且,调用时,不用传递该参数。除此之外,类的方法和普通函数没有什么区别,所以,你仍然可以用默认参数、可变参数和关键字参数。
访问限制
如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问
双下划线开头的实例变量是不是一定不能从外部访问呢?
其实也不是。不能直接访问
__name是因为Python解释器对外把
__name变量改成了_Student__name,所以,仍然可以通过
_Student__name来访问
__name变量:
但是强烈建议你不要这么干,因为不同版本的Python解释器可能会把
__name改成不同的变量名。
总的来说就是,Python本身没有任何机制阻止你干坏事,一切全靠自觉。
继承和多态
多态真正的威力:调用方只管调用,不管细节获取对象信息
当我们拿到一个对象的引用时,如何知道这个对象是什么类型、有哪些方法呢?判断对象类型:type()
Python把每种type类型都定义好了常量,放在types模块里,使用之前,需要先导入:
>>> import types >>> type('abc')==types.StringType True >>> type(u'abc')==types.UnicodeType True >>> type([])==types.ListType True >>> type(str)==types.TypeType True
最后注意到有一种类型就叫TypeType,所有类型本身的类型就是TypeType,比如:
>>> type(int)==type(str)==types.TypeType True
判断一个对象是不是某种类型:isinstance()
isinstance(A, B)
判断A对象是不是B类型
dir()
获得一个对象的所有属性和方法
配合getattr()、setattr()以及hasattr(),我们可以直接操作一个对象的状态:
>>> hasattr(obj, 'x') # 有属性'x'吗? >>> setattr(obj, 'y', 19) # 设置一个属性'y' >>> getattr(obj, 'y') # 获取属性'y' >>> obj.y # 获取属性'y'
相关文章推荐
- python编码问题 decode('unicode-escape')
- python2.7学习笔记(8) ——模块
- IPython基础使用_Round2
- Python的内建常量
- Python的builtins模块
- 在Ubuntu 14.04 64bit下用Python搭建数据科学研究环境
- pycharm templates 设置
- 使用Python脚本获取指定格式文件列表的方法
- 系统性能信息模块篇psutil之获取系统性能信息
- Python学习----函数式编程
- Python2.7生成大连交通大学IPTV播放列表
- Python3.4安装日记
- python核心编程(第二版)习题_第三章
- Python性能优化的20条建议
- Python
- #用Python直接写UTF-8文本文件
- Python开发环境搭建
- Python中的元类(metaclass)
- python 字符串转换,mysql插入带引号字符串,获取html纯文字
- Python资料合集