4-1 面向对象编程
一种程序设计范式,把程序看作不同对象相互调用,对现实世界建立对象模型
类(clss):抽象的定义 例如:人
class Person:
pass
实例:根据类的定义创建 例如:小明,大胸妹,金发妹
daxiongmei = Person()
精髓:数据封装
4-2 定义类并创建实例
类名以大写字母开头,紧接着是(object),表示该类是从哪个类继承下来的。
class Person(object):
pass
xiaoming = Person()
xiaohong = Person()
print xiaoming
print xiaohong
print xiaoming == xiaohong
结果:
<__main__.Person object at 0x7f333572c450>
<__main__.Person object at 0x7f333566bad0>
False
4-3 创建实例属性
如何让每个实例拥有各自不同的属性?由于Python是动态语言,对每一个实例,都可以直接给他们的属性赋值,例如,给xiaoming这个实例加上name、gender和birth属性:两个实例的属性不一定非要相同。实例的属性可以像普通变量一样操作
xiaohong.grade = xiaohong.grade + 1
请创建包含两个 Person 类的实例的 list,并给两个实例的 name 赋值,然后按照 name 进行排序
class Person(object):
pass
p1 = Person()
p1.name = 'Bart'
p2 = Person()
p2.name = 'Adam'
p3 = Person()
p3.name = 'Lisa'
L1 = [p1, p2, p3]
L2 = sorted(L1,cmp = lambda p1,p2 :cmp(p1.name,p2.name))
print L2[0].name
print L2[1].name
print L2[2].name #这里可以写点什么让简单点吗?
4-4 初始化实例属性
虽然我们可以自由地给一个实例绑定各种属性,但是,现实世界中,一种类型的实例应该拥有相同名字的属性。例如,Person类应该在创建的时候就拥有 name、gender 和 birth 属性,怎么办?
在定义 Person 类时,可以为Person类添加一个特殊的init()方法,当创建实例时,init()方法被自动调用,我们就能在此为每个实例都统一加上以下属性:
class Person(object):
def __init__(self, name, gender, birth):
self.name = name
self.gender = gender
self.birth = birth
init() 方法的第一个参数必须是 self(也可以用别的名字,但建议使用习惯用法),后续参数则可以自由指定