继承 重写 多态

文章目录

一.继承

python中类与类之间具有继承关系,其中被继承的类称为父类或者基类,继承的类称为子类或者派生类。

子类在继承父类时,会自动拥有父类中的方法和属性

1.单继承

指的是子类只继承一个父类,其语法格式如下:

class 子类(父类)

定义一个表示两栖动物的父类father和一个青蛙的子类son

代码如下(示例):

#
class Father(object):
   name = "两栖动物"
   def atm(self):
      print("幼年用鳃呼吸")
      print("成年用肺兼皮肤呼吸")
class Son(Father):
   def srt(self):
      print(f"青蛙是{self.name}")
      print("我会嘎嘎叫")
father=Father()
son=Son()
print(Son.name)
Father.atm()
Son.srt()

@@@代码在此处运行出现了TypeError: Son.srt() missing 1 required positional argument: 'self'有读者知道问题所在的话希望能够评论指点一下,谢谢

2.多继承

多继承指一个子类继承多个父类,其语法格式如下:

class 子类(父类A,父类B,...)

定义English,Math类与studentlei,使student类继承english类与math类

代码如下(示例):

#
class eng:
    name="李磊"
    def eng_know(self):
        print("具备英语知识")
class math:
    def math_know(self):
        print("具备数学知识")
class student(eng,math):
    def study(self):
        print("具备双能力")
Eng=eng()
Student=student()
math.math_know("f")
student.study("dd")
print(eng.name)

3.方法的重写

子类可以继承父类的属性和方法,若父类的方法不能后满足子类的要求,子类可以重写父类的方法以实现理想的功能。

父类的定义如下:

class father:

     def special(self):

         print("猫屎咖啡")

子类定义:

class son(father):

   name="猫"

     def special(self):

          print(f"{self.name} 猫屎哪里来")

          print(f"{self.name}猫屎那里去")

像如上的代码在父类中定义的方法special在子类中被重新定义了一下

4.super()

如果子类重写了父类的方法,但仍希望调用父类的方法,那么就使用super()的方法

   super().方法名()

在此段代码中 super()是对父类中的方法进行调用,虽然在子类中已经对方法其重新定义

其中isinstance()是对象之间的判断

描述
Python中的 isinstance() 函数,是Python中的一个内置函数,用来判断一个函数是否是一个已知的类型,类似 type()。

语法
isinstance(object,classinfo)
参数:

object : 实例对象。
classinfo : 可以是直接或者间接类名、基本类型或者由它们组成的元组。

issubclass() 方法

用于判断参数 class 是否是类型参数 classinfo 的子类。

语法

issubclass(class, classinfo)

参数

  • class -- 类。
  • classinfo -- 类。类被认为是自身的参数

5.多态

在python,多态指在不考虑对象类型的情况下使用对象。相比于强类型,python更喜欢“鸭子类型”

python中并不需要显示指定对象的类型,只需对象有预期的方法和表达式操作符,就可以使用对象

      

#多态  不用考虑数据的类型
class Animal:#父类
    def move(self):
        pass#相当于占空行的作用
class Rabit(Animal):#子类
    def move(self):
        print("兔子·蹦蹦跳跳")
class Snail(Animal):#子类
    def move(self):
        print("蜗牛PAYA")
def Test(obj):#针对不同的对象可以调用相同的
    obj.move()
animal=Animal()
rabit=Rabit()
snail=Snail()

不用像c语言那样,声明函数的类型

总结

上一次我们所说到的访问权限问题上:

 def_info(self):是私有方法,不可以在公有域中调用,但我们用了公有的方法间接调用私有方法是可行的。

def_info()self:

def get_weight(self):

self._info

if_name_=='_main_'://判断当前运行是否为主程序在python也经常使用

_init_是初始化对象内部的属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值