python是一种面向对象的编程语言。面对对象的编程语言有三个重要的特性,即封装、继承和多态。下面分别进行介绍。
封装
封装,就是把事物封装成抽象的类,其属性和方法只让可信的类或者对象操作。因此,封装,在一定意义上就是类。比如现在有好几个鸟儿,为了更好的管理这些鸟儿,我们把他们抽象成一个类,然后实例化对象来管理他们。python中类的创建和使用范例如下代码:
class Brid():
def __init__(self,name,weight,fly_height):#初始化
self.name=name
self.weight=weight
self.fly_height=fly_height
def fly(self): #方法
print("my name is ", self.name)
print("I can fly ", self.fly_height)
Jim=Brid('jim',10,100) #创建一个对象
Alice=Brid('Alice',8,80)
Jim.fly() #对象调用类的方法
Alice.fly()
运行结果如下:
my name is jim
I can fly 100
my name is Alice
I can fly 80
继承
继承是基于类的。继承,指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。通俗的来讲,继承是小类和大类的关系。最典型的例子是生物学里的分门别类,如界、门、纲、目、科、属、种。例如哺乳纲下有猫科、犬科等。这里猫科和犬科继承了哺乳纲的属性和方法。猫、犬科是子类,哺乳纲是父类。还有个例子是我们可以分男人女人,老师学生等,都可以从人这个父类继承。
一个类的继承例子如下:
class Person():
def __init__(self, name, gender):
self.name = name
self.gender = gender
def whoAmI(self):
print('I am a Person, my name is', self.name)
class Student(Person):
def __init__(self, name, gender, score):
super(Student, self).__init__(name, gender)
self.score = score
def whoAmI(self):
print('I am a Person, my name is', self.name)
def playGame(self):
print("I like playing game ")
class Teacher(Person):
def __init__(self, name, gender, course):
super(Teacher, self).__init__(name, gender)
self.course = course
def teaching(self):
print("I like teaching students ")
多态
多态是基于继承的。是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。当子类对象在调用类的方法时,当子类没有定义该方法,则朝父类去寻找该方法的实现。针对上面的类的继承,我们有p,s,t三个对象如下
p = Person('Tim', 'Male')
s = Student('Bob', 'Male', 88)
t = Teacher('Alice', 'Female', 'English')
p.whoAmI()
s.whoAmI()
t.whoAmI()
输出结果如下:
I am a Person, my name is Tim
I am a Student, my name is Bob
I am a Person, my name is Alice
我们可以看到,同样的是调用whoAmI方法,三个对象的结果不同,是一种多态的表现。另外值得注意的是,Teacher的对象t没有在子类中实例化whoAmI方法,但是他追溯,向上父类找到该方法的实现。这也是多态的一种表现。
总结
面向对象的编程语言是基于类实现的,而类有继承,继承有催生了多态。因此这是一脉相承的,只有深刻理解了封装、继承和多态,才能理解面向对象编程。