
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
面向对象编程,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
1、类
创建办法:
class Student(object): pass
如果没有合适继承类,使用object类,所有类都会继承的类。通过__init__方法,可以将必须绑定的属性强制写入。
class Student(object): def __init__(self, name, score): self.name = name self.score = score
第一参数永远是self,创建的实例本身。
2、访问限制
在类变量的前加入__,就会变成私有变量。内部能访问,外部不能访问。私有变量的实现其实是对变量别名。
class Student(object):
def __init__(self, name, score):
self.__name = name
self.__score = score
python解释器对外将__name变量改成_Student__name。访问_Student__name还是可以访问__name变量。
类似:__XXX__是特殊变量,可以直接引用,但是有特殊用途,如if __name__ == '__main__':,我们自己变量一般不用这种变量名。
_XXX和__XXX这样的函数和变量“不应该”被直接引用。
3、继承与多态
从现有的class继承,新的class称为子类。被继承的class称为基类、父类、或超类。如:
class Animal(object):
def run(self):
print('Animal is running...')
Dog,Cat从Animal继承:
class Dog(Animal):
pass
class Cat(Animal):
pass
作用:
(1)继承类获得父类的全部功能;Dog,Cat都有run()方法,也可以增加自己的方法。
(2)可以对继承方法修改。当子类和父类都有同一方法时,调用时,子类覆盖父类的方法。提现继承的多态性,一个Dog实例化的对象,即是属于Dog类,也属于Animal类。
(3)继承可以一级一级继承下来。因此一个类可以继承多个类的特性。
4、动态语言和静态语言
编写一个接受Animal类型的变量
def run_twice(animal):
animal.run()
animal.run()
可以对实例后传参,run_twice(Dog())、run_twice(Cat());
对于静态语言,如果需要传入Animal类型,则传入对象必须是Animal类或者它的子类,否则不能调用run方法。但是对于python这种动态语言而言,只需要保证传入对象有一个run()方法就可以了。
class Timer(object):
def run(self):
print('Start...')
因此也能调用run_twice函数调用run()方法。run_twice(Timer())。也就是只要一个对象“看起来像鸭子,走起路来像鸭子”,那它就可以看做鸭子。
5、获取对象信息
(1)type():判断对象类型;
(2)isinstance():判断class的类型,判断一个对象是否属于某个类。能用type判断的类型也能用isinstance()判断。
(3)dir():获取一个对象的所有属性和方法。
(4)之前说的__xxx__有特殊作用,比如__len__方法,我们调用len()函数获取对象长度时,len()函数内部会自动调用__len__()方法。
因此,计算len('ABC')等价'ABC'.__len__()
(5)利用getattr()、setattr、hasattr可以直接操作对象的状态。
hasattr():判断是否有某个属性;
getattr():获取属性值
setattr():设置一个属性值。