面向对象,继承与多态

###面向对象
##继承与多态
面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。
提到面向对象的第一反应就是:抽象 (abstraction),封装(Encapsulation) , 继承(Inheritance) ,多态(Polymorphism),本文就主要分享一下* 继承 *与 多态

继承的概念
继承是由已有的类创建新类的机制。
由继承得到的类称为子类(派生类),被继承的类称为父类(超类)(基类)

继承的原则
子类继承父类的成员变量和成员方法
子类不继承父类的构造方法,能够继承父类的析构方法
子类不能删除父类的成员,但可以重定义父类成员
子类可以增加自己的成员

继承的作用
实现软件可重用的重要方式
增强软件可扩充性
提高软件的可维护性

【单继承】
class animal:
def init(self,name,age,weight) -> None:
self.name=name
self.age=age
self.weight=weight
def Say(self):
print(f"{self.name},{self.age}")

class cat(animal):
def init(self, name, age, weight,sex) -> None:
super().init(name, age, weight)
self.sex=sex

def Say(self):
    print(f"{self.name},{self.age},{self.sex}")

x=cat(“Tom”,3,18,“母”)
x.Say()

【多继承】
class Father:
def swim(self):
print(“狗刨经典式,游泳使我快乐!!!”)

class Monther:
def sing(self):
print(“唱歌使我年轻!”)
def swim(self):
print(“蝶泳,游泳使我快乐!!!”)
class son(Monther,Father): # 如果出现 重名 方法,有顺序 优先
pass

x=son()
x.swim()
输出结果:
蝶泳,游泳使我快乐!!!

子类可以在父类的基础上添加额外参数
class person():

def __init__(self,name,age) -> None:
    self.name=name
    self.age=age

def tall(self):
    print("好好学习")

class man(person):

def __init__(self, name, age,sex) -> None:
    super().__init__(name, age)
    self.sex=sex

def tall(self):
    super().tall()
    print("python无敌")

x=man(“老衲”,22,“男”)
x.tall()

super
super()用来引用当前对象的父类,用super()可以实现对父类成员的访问。
访问父类被隐藏的成员变量,如:
super().variable
调用父类中被覆盖的方法,如:
super().Method([paramlist])
调用父类的构造函数,如:
super.init([paramlist])

注意:super()维系了整个继承关系

##多态
首先Python不支持多态,也不用支持多态,python是一种多态语言,崇尚鸭子类型。
在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定。

class A:
def prt(self):
print (“A”)

class B(A):
def prt(self):
print (“B”)

class C(A):
def prt(self):
print (“C”)

class D(A):
pass

class E:
def prt(self):
print (“E”)

class F(A):
pass

def test(arg):
arg.prt()

a = A()
b = B()
c = C()
d = D()
e = E()
f = F()

test(a)
test(b)
test©
test(d)
test(e)
test(f)
结果:
A
B
C
A
E
F
没有谁规定test方法是接收的参数是什么类型的。test方法只规定,接收一个参数,调用这个参数的prt方法。在运行的时候如果这个参数有prt方法,python就执行,如果没有,python就报错
如果F没有参数就会报以下错误
AttributeError: ‘F’ object has no attribute ‘prt’
##实例
class Animal():

def __init__(self,name) -> None:
    self.name=name

def run(self):
    print("%s跑。。。"%self.name)

class cat(Animal):
def run(self):
print("%s跑。。。"%self.name)

class dog(Animal):
def eat(self):
print("%s吃。。。"%self.name)

a=cat(“猫”)
b=dog(“狗”)
a.run()
b.run()
b.eat()
结果:
猫跑。。。
狗跑。。。
狗吃。。。

这个时候我们可以看到在父类animals中定义的run为 run:~~ 但是在字类中重写方法之后再调用就会输出子类中重写的方法。这个就体验出了多态的灵活性,可以再子类中重写方法,但是对其他并不影响。
这就是多态

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值