您的位置:首页 > 编程语言 > Python开发

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'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: