python 封装 继承 多态 例子_Python面向对象三大特性(封装、继承、多态)

封装

类中把某些属性和方法隐藏起来,或者定义为私有,只在类的内部使用,在类的外部无法访问,或者留下少量的接口(函数)供外部访问;从上一篇文章中的私有属性与私有方法中的代码体现了该特性。

class man():

def __init__(self,name):

self.name = name

self.__passwd = "123456"

def changepass(self,newpasswd):

self.__passwd = newpasswd

print(self.__passwd)

liming = man("liming")

#没有liming.passwd/liming.__passwd属性

#只能通过一下changepass方法来查看或修改内部属性

liming.changepass("abc123456")

继承

一个种类里面,存在共有的属性和动作。比如动物类,存在共有的属性(长度、高度等)和动作(吃、跑、叫等)。在程序中是为了实现代码的重用,相同的代码不需要重复的编写。父类里定义的属性、方法自动被子类继承。

比如下面的这个例子(仅继承):

class dog:

def __init__(self,name):

self.name = name

def eat(self):

print("%s,正在吃..."% self.name)

def run(self):

print("%s,正在跑..."% self.name)

class poodle(dog): #poodle(贵宾犬)是dog的子类.poodle类继承了dog类的所有属性与方法。

pass

my_dog = poodle("小花")

my_dog.eat()

my_dog.run()

#输出

小花,正在吃...

小花,正在跑...

当然,子类不仅可以继承父类,还可以在父类的基础上增加其他方法和属性。

class dog:

def __init__(self,name):

self.name = name

def eat(self):

print("%s,正在吃..."% self.name)

def run(self):

print("%s,正在跑..."% self.name)

class poodle(dog):

def lovely(self): #增加新的方法

print("%s is lovely!" % self.name)

my_dog = poodle("小花")

my_dog.eat()

my_dog.run()

my_dog.lovely()

#输出

小花,正在吃...

小花,正在跑...

小花 is lovely!

重构父类方法(重写)

重写父类方法:

class dog:

def __init__(self,name):

self.name = name

def eat(self):

print("%s,正在吃..."% self.name)

def run(self):

print("%s,正在跑..."% self.name)

class poodle(dog):

def run(self):

print("%s is running!" % self.name)

my_dog = poodle("小花")

my_dog.eat()

my_dog.run()

#输出

小花,正在吃...

小花 is running!

先执行父类方法中的代码再执行子类方法中的代码:

class dog:

def __init__(self,name):

self.name = name

def eat(self):

print("%s,正在吃..."% self.name)

def run(self):

print("%s,正在跑..."% self.name)

class poodle(dog):

def run(self):

dog.run(self)

print("%s is running!" % self.name)

my_dog = poodle("小花")

my_dog.eat()

my_dog.run()

#输出

小花,正在吃...

小花,正在跑...

小花 is running!

完全重构构造函数:

class dog:

def __init__(self,name):

self.name = name

def eat(self):

print("%s,正在吃..."% self.name)

def run(self):

print("%s,正在跑..."% self.name)

class poodle(dog):

def lovely(self):

print("%s is lovely!" % self.name)

class jiwawa(dog):

def __init__(self,name,gun):

dog.__init__(self,name)

self.gun = gun

def wawa(self):

print("%s 是吉娃娃狗种!" % self.name)

def xgun(self):

print("%s" % self.gun)

dog1 = poodle("小花")

dog1.eat()

dog1.run()

dog2 = jiwawa("小黑","yes")

dog2.wawa()

dog2.xgun()

##输出

小花,正在吃...

小花,正在跑...

小黑 是吉娃娃狗种!

yes

也可以使用这种写法

super(jiwawa,self).__init__(name)

新式类与经典类

经典类是老版本,新式类是新版版。

#经典类

class dog:

#新式类

class dog(object):

#经典类写法

dog.__init__(self,name)

#新式类写法

uper(jiwawa,self).__init__(name)

经典类与新式类的区别:多继承。

多继承

class dog:

def __init__(self,name):

self.name = name

def eat(self):

print("%s,正在吃..."% self.name)

def run(self):

print("%s,正在跑..."% self.name)

class Relation(object):

def makefriends(self,obj):

print("%s要和%s交朋友!" % (self.name,obj.name))

class poodle(dog,Relation):

def lovely(self):

print("%s is lovely!" % self.name)

class jiwawa(dog):

def __init__(self,name,gun):

#dog.__init__(self,name)

super(jiwawa,self).__init__(name)

self.gun = gun

def wawa(self):

print("%s 是吉娃娃狗种!" % self.name)

def xgun(self):

print("%s" % self.gun)

dog2 = jiwawa("小黑","yes")

dog1 = poodle("小花")

dog1.makefriends(dog2)

#输出

小花要和小黑交朋友!

多态

多态不同的子类对象调用相同的父类方法,产生不同的执行结果

多态可以增加代码的灵活度,以继承和重写父类方法为前提是调用方法的技巧,不会影响到类的内部设计

同一个接口多种实现

class dog:

@staticmethod

def dog_run(obj):

obj.run()

class poodle(dog):

def run(self):

print("贵宾犬,正在跑!")

class jiwawa(dog):

def run(self):

print("吉娃娃,正在跑")

d1 = poodle()

d2 = jiwawa()

dog.dog_run(d1)

dog.dog_run(d2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值