Python类和对象以及继承多态(超详细,小白也可以懂)

Posted 小布丁value

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python类和对象以及继承多态(超详细,小白也可以懂)相关的知识,希望对你有一定的参考价值。

类和对象的概念

与Java概念一致
2类定义与访问

class类名([父类列表]):
        ""类注释"""
         类体

类定义与访问

  • 一个类由五部分组成:class关键字,类名称,继承父类列表,类的文档字符串和类体组成。这里的class是关键字,后边跟一个类名,类名需要符合标识符规则来命名,如果类名后需要继承父类,再括号中协商父类的名称,如果不继承父类,父类名写为object或不写。冒号不能省略,类体主要由属性和方法构成(Python支持函数重载但是不支持方法重载)
    方法:类是对某一类事物的抽象,如果需要给一个类添加功能,需要在类中定义方法来实现。方法就是类中定义的函数。比如鱼类都具有游泳的功能:
#定义一个类,类中包含两个方法
class fish(object):
   count = 0
   def swim(self):#swim就是fish中定义的方法
       print("i can swiming")

   def eat(self):
       print("i can eat")
crap = fish()#实例化对象
crap.swim()#对象调用方法
crap.eat()

i can swiming
i can eat

class fish(object):
    def __init__(self,fish_name):#定义构造方法
        self.name=fish_name #
        print("我是构造方法")
    def swim(self):
        print("i can swiming")

    def eat(self):
        print("i can eat")

    def get_name(self):
        print("我的名字叫%s"%self.name)


grass_crap=fish("草鱼")#创建一个草鱼对象
grass_crap.swim()
grass_crap.get_name()

我是构造方法
i can swiming
我的名字叫草鱼

  • 析构函数
    当对象被销毁时会调用析构函数,在Python中,析构函数不像c++语言中那么必须,因为Python有垃圾!集器,可以自动进行内存管理。del_()方法在Python中称为析构函数。当对象的所有引用都已被删除时,激荡一个对象被垃圾回收时,将调用该函数析构一个对象。
class fish(object):
    def __init__(self,name):
        self.name = name

    def swim(self):
        print("%s can swiming"%self.name)

    def __del__(self):
        print("%s 的函数"%self.name)

grass_crap=fish("超级难")
grass_crap.swim()

鱼 can swiming
鱼 的函数

方法的使用

1.#断言

list_num =[1,2,3,4,5]
def chang_value(list_num,index,value):
    if type(list_num) !=list:
        return
    # if index < 0 or index >= len(list_num):
    #     return
    assert  index >=0 and index <len(list_num)
    list_num[index]=value

chang_value(list_num,0,99)
print(list_num)

[99, 2, 3, 4, 5]
2.实现两数相加
return 可以返回一个或多个值,以元组(tuple)形式返回

def get_sum(a,b):
    result = a+b
    return a,b,result,"hell0"
tuple = get_sum(10,20)

(10, 20, 30, ‘hell0’)
3.返回 1+20 2+20 3+30

def get_sum(a,b=20):
    result = a+b
    return result
num1 = get_sum(1)
num2 = get_sum(2)
num3 = get_sum(3)
print(num2,num1,num3)

22 21 23

类变量,实例(成员)变量和局部变量

: https://blog.csdn.net/Strive_0902/article/details/105325065?

继承特性

  • 面向对象编程(OOP)的一个主要特性就是”继承“。继承是指这样一种能力,它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。(和Java相同)
  • 编写类的时候,如果没有合适的类继承,就继承自object类,他是python中所有对象的组先
  • 通过继承,子类获得父类全部的非私有的功能,这样子类不需要从零坐骑。继承的最大好处是子类获得了父类的全部功能
class Parents(object):
    def __init__(self,name):
        self.name=name
        print("I am parents")

    def eat(self):
        print("I can eat")

class child(Parents):
    def __init__(self,cname):
        self.cname=cname
        print("I am a child")

    def jump(self):
        print(" i can jump")
        
child1=child("李红")
child1.jump()
child1.eat()

i can jump
I can eat
Python支持多继承,意味着一个子类可以继承多个父类

class monther(object):
    def monther_skill(self):
        print("monther can eat")

class father(object):
    def father_skill(self):
        print("father can eat")

class child(father,monther):
    pass

child1=child()
child1.monther_skill()

monther can eat
father can eat

  • 方法重写
    父类中的方法不能满足子类的要求是,子类也可以对其进行重写。子类对象不仅可以调用子类中的方法,还可以调用父类中的方法。当子类方法和父类方法重名是,子类对象有限调用子类中的方法。例如:
class child(Parents):
    def __init__(self,cname):
        self.cname=cname
        print("I am a child")

    def jump(self):
        print(" i can jump")

    def eat(self):
        print(" child can eating")

i can jump
child can eating

  • 继承的二义性问题 当一个子类继承多个父类的时候,如果多个父类中存在相同的方法时,子类的调用规则时从左往右,深度优先原则进行。

多态特性

在这里插入图片描述

获取对象信息

1)使用type查看指定对象的类型信息a = 2.1
b = [11,22]
print(type(a))#返回的时指定对象的类型名称一》 <class ‘float’>print(type(b))
-》 <class ‘list’>
if type(a) == float
“”"
2)对于类继承关系来说,使用type()就有点不方便。我们要判断class的类型,可以使用isinstance()函数

class father(object):
    def father_skill(self):
        print(" i an a father")

class son(father):
    pass
class xson(son):
    pass

a=son()
b=xson()
print(isinstance(a,son))#true
print(isinstance(a,father))#true
print(isinstance(b,father))#true

3)dir函数
如果要获得一个对象的所有属性和方法,可以使用dir()函数,他返回一个包含字符串的list。比如,获得一个list对象的所有属性和方法:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

以上是关于Python类和对象以及继承多态(超详细,小白也可以懂)的主要内容,如果未能解决你的问题,请参考以下文章

python-继承以及继承问题和多态

Python 面向对象(创建类和对象,面向对象的三大特性是指:封装继承和多态,多态性)

Python基础- 类和对象(使用继承派生组合接口多态封装propertystaticmethodclassmethod反射slots上下文管理协议元类)

python(类的封装调用/继承/多态)

面向对象一文了解Java继承(超详细超有趣)

面向对象一文了解Java继承(超详细超有趣)