Python基础(12):面向对象基础(类,实例,封装,继承,多态)

版权声明:转载请注明来处 https://blog.csdn.net/Daisy_zye/article/details/84788915

一,什么是面向对象?

面向对象,Object Oriented Programming,简称oop。是一种程序设计思想。

中心:将对象作为程序的基本单元。一个对象包含了数据和操作数据的函数。

python,一切皆对象。

二,类和实例

类,class,抽象的模板。

实例,instance,根据类创建出来的一个个具体的“对象”。

定义一个类并实例化:

class test(object):                 #class关键字用于定义类,(object)是指,进程于object类
    def __init__(self,name,result): #__init__是构造函数,可以理解为,实例化变量时默认执行的函数,第一个参数必须是selt
        self.name=name               #name和result分别为test的属性,在实例化的时候需要传入
        self.result=result
t1=test('a','ok')                   #实例化对象,name=a,result=ok

类中的属性,就是通过构造函数来添加的。

接下来来看,类方法的定义:

    def testfun(self):              #第一个参数必须为self,可以接收各种参数,默认参数,关键字参数,可变参数等。
        return self.result.upper()  #可以通过self对对象属性进行操作。

三,面向对象的特点

1,数据封装

类方法的出现来源于这样一个简单对比:

对于上例中,返回对象的result并且大写,我们可以有两种实现方案,除了类方法,还可以在类外部定义一个方法,来获取并转化。

def fun():
    return (t1.result.upper())
print(fun())

这样的实现,从结果上来看,并没有任何的瑕疵。

但是,两点需要考虑:

1>定义一个类,要和其他人共同使用时,每个人都写一个方法太过繁琐。

2>直接利用对象,获得属性进行操作,可能会在过程中引起属性被更改。

类方法的出现,正是基于数据封装的思想,来解决这两类情况。

公共操作全部定义成类方法,直接调用保证数据安全性。

2,继承

继承是面向对象的另一个特性。

在上面的例子中,定义类时,我们发现有个:(object)。

是指,我们的类继承于object这个类,而此时,object就是test的基类,而test,就是object的子类。

继承的意义在于,子类可以直接通过继承,获得父类的全部功能。(隐隐有点像拼爹……)

实例:(上面的例子不太好,重新写一个基类,Transportation,交通工具)


class Transportation(object):              #交通工具基类
    def run(self):                         #run方法
        return 'Transportation is running'
class car(Transportation):                 #car类,继承于交通工具,然后啥也没干
    pass
class bus(Transportation):                 #bus类,继承于交通工具,然后啥也没干
    pass
c=car()                                    #实例化
b=bus()                                    
print(c.run())                             #啥也没干就继承了一个run方法
print(b.run())

运行结果:

可是,car和bus,都输出的是transportation is running,有点……不人性化,怎么能让它有所区别?下一个特点,多态!

3,多态

针对上一个问题,首先,我们可以对继承的方法进行重写。

其次,多态是指,当调用类方法时,对于不同的子类,调用实际类型的类方法。

一个例子:

class Transportation(object):
    def run(self):
        return 'Transportation is running'
class car(Transportation):
    def run(self):
        return 'car is running'
class bus(Transportation):
    def run(self):
        return 'bus is running'
t=Transportation()
c=car()
b=bus()
def test(Transportation):
    return Transportation.run()
print(test(t))
print(test(c))
print(test(b))

运行结果:

猜你喜欢

转载自blog.csdn.net/Daisy_zye/article/details/84788915