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

一,什么是面向对象?

面向对象,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))

运行结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值