python2.7学习笔记(9) ——面向对象编程
来源:互联网 发布:淘宝卖微信号违法吗 编辑:程序博客网 时间:2024/05/25 05:34
类和实例
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.StringTypeTrue>>> type(u'abc')==types.UnicodeTypeTrue>>> type([])==types.ListTypeTrue>>> type(str)==types.TypeTypeTrue
最后注意到有一种类型就叫TypeType,所有类型本身的类型就是TypeType,比如:
>>> type(int)==type(str)==types.TypeTypeTrue
判断一个对象是不是某种类型: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'
0 0
- python2.7学习笔记(9) ——面向对象编程
- python2.7学习笔记(10) ——面向对象高级编程
- Python3学习笔记(7)—— 面向对象编程
- Python学习笔记 7—面向对象编程
- Python学习笔记(六)——面向对象编程
- 面向对象编程小结(学习笔记)
- 学习笔记之JavaSE(18)--面向对象编程9
- C++ Primer学习笔记——$15 面向对象编程
- 《Java面向对象编程》学习笔记12——计数器
- C++ Primer学习笔记——$15 面向对象编程
- java学习笔记《java面向对象编程》——继承
- java学习笔记《面向对象编程》——接口
- java学习笔记《面向对象编程》——异常处理
- Java学习笔记4 —— 面向对象编程概念
- C++ Primer 学习笔记十五 —— 面向对象编程
- JavaScript学习笔记——面向对象编程(OOP)
- Python面向对象编程——学习笔记
- Python面向对象高级编程——学习笔记
- 编写你自己的单点登录(SSO)服务——sso原理分析
- c++数组宽度计算的sizeof关于指针设想
- A Rose by Any Other Name Will End Up As a Cabbage
- LTE学习:天线端口数目和物理天线数目关系
- iOS 下拉刷新和上拉加载更多
- python2.7学习笔记(9) ——面向对象编程
- Android中使用SurfaceView视频播放器
- Leetcode: Clone Graph
- 程序员如何在"小公司成长"和"大公司学习"
- [转]struct和typedef struct彻底明白了
- Nginx配置文件详细说明
- pandas
- LeetCode----Roman To Integer
- 更加简洁易用——wangEditor富文本编辑器新版本发布