其实开始在大一下学Java时候学过面向对象,但是当时没有深入去探讨加上后来遗忘,面向对象就多多少少不会了。现如今学python正好学到了这里,我们就来对面向对象三大特性作个理解性的总结。
首先,面向对象三大特性:继承,封装,多态。要理解三个特性,必须知道啥子叫对象,啥子叫类。打个比方,你要盖房子,手里面有设计图纸,这就是类,相当于你要做的是什么事情;你的设计方案里面未建的房子,要拆的房子,建好的房子,这就是对象;你要建房的过程,建房的手段,这就是方法。
那么啥子叫继承?
继承:类似于遗传,父对象(父类)具有的属性或者方法,子对象(子类)也可以有这些属性与方法。继承又分为单继承,多继承。单继承简单地说就是父类自我繁殖了一个子类,子类方法可以遗传父类,也可以自我重构,变得和父类不一样;多继承就是子类有多个“父亲”,继承了多个父类的方法和属性,但是如果遇到重名问题,比方说有几个父类都有add方法,子类要用这个add方法,就要通过一条继承链,子类继承父类有先后顺序,子类使用的add方法就是通过这条继承链找到的第一个父类的add方法。
那么啥子叫封装?
简单地说,就是把属性和方法放到一个类里面,再通过对象访问属性和方法。那么为什么会用到封装?
可以避免重复创造函数(方法),提高代码复用性和可扩展性。面向过程编程可以理解为:所有变量与方法都是暴露在外面,一个程序中,所有方法共享全局变量(属性),势必会造成修改异常,所以把所有属性与方法封装在类(黑箱子)的内部,类属性相当于类内部的全局变量,实例属性相当于方法内部的局部变量。只需通过类来创建不同实例a,b,c,d,实例可以将这些属性方法私有化,实例怎么折腾都行。
例子:
class Cat:
'''定义一个Cat类'''
#初始化对象
def __init__(self,new_name,new_age):# self.属性 = 形参
self.name = new_name
self.age = new_age
def __str__(self):
return ("%s的年龄是:%d"%(self.name,self.age))
#方法
'''吃'''
def eat(self):
print("猫咪在吃鱼 。。。")
return "haochi"
'''喝'''
def drink(self):
print("猫咪在喝kuoluo。。。")
return "cheer"
'''介绍'''
def introduce(self):
print("%s的年龄是:%d"%(self.name,self.age))
#创建对象(实例)
tom = Cat("汤姆",15)
superBlueCat = Cat("超威蓝猫",5)
print(tom)
print(superBlueCat)
print(tom.eat())
print(superBlueCat.drink())
那么啥子叫多态?
同一种方法,不同的对象调用该方法,实现功能不一样。举个例子,python里面的“+”方法,如果是1+2,实现的就是整型数的相加,如果是'a'+'b',结果就是ab,就是字符串的拼接,如果是[a]+[b],就是列表拼接。这就体现了多态的思想。
例子:
class Bird:
def move(self, field):
print('鸟在%s上自由地飞翔' % field)
class Dog:
def move(self, field):
print('狗在%s里飞快的奔跑' % field)
# x变量被赋值为Bird对象
x = Bird()
# 调用x变量的move()方法
x.move('天空')
# x变量被赋值为Dog对象
x = Dog()
# 调用x变量的move()方法
x.move('草地')
以上是我的理解,如有不准确还请指正。