Python基础10 面向对象(下)

作者:玉树【林】风

转自:http://techlin.cn

欢迎转载,也请保留这段声明。

 

继承

在现实世界中,不同的类之间可能存在某种从属关系。

例如:猫和狗都属于哺乳动物,猫和狗都有2只眼睛、4个脚、1个尾巴,也能够吃饭、睡觉、发出叫声。只是猫的叫声和狗的叫声不同。

那么我们先定义一个哺乳动物类。

# encoding=utf-8

class Mammal:
    eyes = 2 
    legs = 4 
    tail = 1 

    # 吃东西
    def eat(self): 
        print('eating!')
    
    # 睡觉
    def sleep(self): 
        print('sleeping!')
    
    # 发出叫声
    def cry(self):
        pass

这里可以发现,猫和狗除cry的方法不同外,其他属性和行为都相同,那么我们利用继承的方式,就不需要重新定义这些相同的属性和方法了。

class Dog(Mammal):
    pass

class Cat(Mammal):
    pass

Tom = Cat()
Odd = Dog()

print('Tom has %d eyes' % Tom.eyes)
print('Odd has %d eyes' % Odd.eyes)
Tom.eat()
Odd.eat()

输出为

Tom has 2 eyes
Odd has 2 eyes
eating!
eating!

可以发现,Mammal的子类Cat和Dog都可以调用父类的方法,并获得父类的属性。

 

方法重写

刚刚我们新建了Cat类和Dog类,各自集成了Mammal类,分别拥有了哺乳动物的基本属性和行为。但是对于cry这个方法,猫和狗是不一样的。

Mammal类中cry方法体为pass,即方法为空。

我们可以使用方法重新的办法将猫和狗的cry方法进行重写,使猫和狗有各自不同的叫声。

# encoding=utf-8

class Dog(Mammal):
    def cry(self):
        print('汪汪')

class Cat(Mammal):
    def cry(self):
        print('喵')

Tom = Cat()
Tom.cry()
Odd = Dog()
Odd.cry()
输出为

喵
汪汪

通过方法重写,我们就使Mammal的子类猫和狗拥有了各自不同的叫声。

 

私有属性及私有方法

为了类能够被安全的调用,Python提供了一套属性、方法私有的方式,防止类中不对外公开的属性和方法被外部访问。

我们只需要在定义的变量或方法前加2条下滑线(如:__param_name、__func)即可。

# encoding=utf-8

class fruit:
    __private_param = '私有属性'

    def __private_func(self):
        print('私有方法')

f = fruit()
print(f.__private_param)
f.__private_func()

启动后报错,报错信息如下

AttributeError: 'fruit' object has no attribute '__private_param'

如果将第8行代码注释掉,报错信息如下

AttributeError: 'fruit' object has no attribute '__private_func'

当我们将属性或方法定义为私有、通过实例对象的方式就无法直接访问了,只能在类的内部访问。

 

总结

这节课我们将面向对象的剩余部分讲解完毕,主要内容包括:

类的集成

方法的重写

私有属性和私有方法的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值