python基础之继承特性

512 篇文章 32 订阅
512 篇文章 7 订阅
本文介绍了Python中的继承概念,包括单继承和多继承,强调了继承的作用是提高代码重用率。通过实例展示了如何查看类的父类,以及如何实现方法的复写。同时,讲解了`super()`函数的使用方式,以及`__init__()`方法在继承中的注意事项,特别是当子类复写父类`__init__()`方法时可能出现的问题。
摘要由CSDN通过智能技术生成

1、什么是继承

继承就是让类和类之间产生父子关系,子类可以拥有父类的静态属性和方法。
[继承就是可以获取另外一个类中的静态属性和普通方法。(并非所有成员)]
在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类。
注意:python中的继承分为:单继承和多继承。
2、继承中的子类和父类的概念

父类:用于被继承的类,称之为父类,也叫做基类,或者超类。
子类:继承其他类的类,称之为子类,也叫做派生类。
3、继承的作用

就是提高代码的重用率
4、查看继承的父类

格式:类名.bases
注意:
(1).python3中如果一个类没有继承任何类,默认继承object类。我们管这种类叫做新式类。
(2).object类,是python中的祖宗,所有的类都是从object类中继承下来的。

练习:创建Dog类和Cat类,分别设置name,gender,age属性和定义eat()、sleep()方法。
并且Dog类在定义一个bite()方法,Cat类定义climb_tree()方法。最后,如果你的时间不是很紧张,并且又想快速的python提高,最重要的是不怕吃苦,建议你可以架尉♥信(同音):276 3177 065 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~

class Animal(object):  # 创建父类 Animal,里面是子类共有的方法

    type = '动物'

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def eat(self):
        print('吃...')

    def sleep(self):
        print('睡...')


class Dog(Animal):  # 继承父类Animal,就可以调用父类里面的方法

    def look_house(self):
        print('看大门...')


class Cat(Animal):  # 继承父类Animal

    def climb_tree(self):
        print('爬树...')

dog = Dog(‘京东狗’, 8)
dog.eat() # 吃…
dog.sleep() # 睡…
dog.look_house() # 看大门…
cat = Cat(‘天猫’, 10)
cat.eat() # 吃…
cat.sleep() # 睡…
cat.climb_tree() # 爬树…

查看继承的父类

print(Cat.bases) # (<class ‘main.Animal’>,)
print(Dog.bases) # (<class ‘main.Animal’>,)
print(Animal.bases) # (<class ‘object’>,)
123456789101112131415161718192021222324252627282930313233343536373839

4、方法的复写

子类中定义了和父类中相同的方法,我们叫做方法的复写(派生方法)。实例对象调用此方法 的时候就会调用自己类中的方法了。

class Animal(object): # 创建父类 Animal,里面是子类共有的方法

type = ‘动物’

def __init__(self, name, age):
    self.name = name
    self.age = age

def eat(self):
    print('吃...')

def sleep(self):
    print('睡...')

class Dog(Animal): # 继承父类Animal,就可以调用父类里面的方法

def look_house(self):
    print('看大门...')

def eat(self):   #定义了和父类相同的方法,实例对象调用此方法 的时候就会调用自己类中的方法了,不再调用父类中的方法
    print('吃狗粮...')

dog = Dog(‘京东狗’,8)
dog.eat() # 吃狗粮…
123456789101112131415161718192021222324

5、super()

子类和父类有相同的方法,如果子类想调用父类相同的的方法。可以使用super()方法。
在python3中,子类执行父类的方法也可以直接用super方法 —>super()
super默认省略了两个参数 第一个参数是类名,第二个参数是self。两个参数可以省略不传递例如 super(Student,self)
super()还可以从类的外部使用 需要传递类名(本类的名称)和对象名
具体调用方法格式:
1、supper(本类类名,对象名).方法() 既可以在类的外部使用,也可以在类的外部使用
2、 父类类名,方法名(self)—>Animal.eat(self) 既可以在内部也可以在外部使用
3、supper().eat() —>只能在类的内部使用

class Animal(object): # 创建父类 Animal,里面是子类共有的方法
type = ‘动物’

def __init__(self, name, age):
    self.name = name
    self.age = age

def eat(self):
    print('吃...')

def sleep(self):
    print('睡...')

class Dog(Animal): # 继承父类Animal,就可以调用父类里面的方法

def look_house(self):
    print('看大门...')

def eat(self):
    # super().eat() # 使用的是父类eat方法 ,只能在类的内部使用
    Animal.eat(self) # 父类类名,方法名(self) # 吃... 可以在类的内部使用也可以在类的外部使用
    super(Dog,self).eat()  #等价于 super().eat() # 吃... 可以在类的内部也可以在类的外部
    super()
    print('吃狗粮...')   # 吃狗粮...

dog = Dog(‘京东狗’,8)
Animal.eat(dog) # 吃…
dog.eat() #

dog.climb_tree # 找不到报错

super(Dog,dog).eat() # supper(本类类名,对象名).方法 # 吃…
1234567891011121314151617181920212223242526272829303132

运行结果:

吃…
吃…
吃…
吃狗粮…
吃…
12345

6、init()方法

子类继承父类,如果子类不复写父类的init()方法,
创建子类对象的时候会自动调用父类init()方法。

子类继承父类,如果子类复习了父类的init()方法,
创建的子类对象的时候不会再调用父类的init() 方法。
注意:python要求复习父类的init()方法时,需要调用父类的init()
因为存在隐患,例如父类的初始化方法有参数,子类初始化无参数,子类再调用父类
的参数的时候就会报错。

简单举例;

class Person(object):
def init(self, name):
self.name = name
print(‘person…’)

class Student(Person):
def init(self):

子类复写了__init__()方法,此时子类初始化无参数,而父类初始化有参数,这时候就会报错

    super().__init__()
    print('student...')

def eat(self):
    print(self.name)

student = Student()
12345678910111213141516

运行结果;

Traceback (most recent call last):
File “E:/homework/pythonworksplace/day16-面向对象/demon05-init.py”, line 23, in
student = Student()
File “E:/homework/pythonworksplace/day16-面向对象/demon05-init.py”, line 16, in init
super().init()
TypeError: init() missing 1 required positional argument: ‘name’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值