欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python语法第10讲:面向对象之继承

程序员文章站 2022-05-28 14:24:32
...

继承指的是子类可以继承父类的资源,在Python中支持多继承,也就是说一个儿子可以有多个爸爸

1、继承

在Python中继承显得十分的简洁,如果一个类继承自另一个类,只需将父类放到小括号中添加到子类类名后面即可,多个父类用半角逗号隔开

#基类
class Animal:

    def __init__(self, name): #构造器
        self.name = name
        
    def eat(self):
        print("%s 吃东西" %self.name)
        
    def drink(self):
        print("%s 喝水" %self.name)

#子类
class Dog(Animal): #Dog类继承自Animal类,python支持多继承,多个父类用逗号隔开

    def __init__(self, name): #构造器
        super().__init__(name) #调用父类的构造器
        
    def eat(self): #重写父类的eat方法
        print("%s 啃骨头" %self.name)


d = Dog("金毛")
d.drink()
d.eat()
2、常用的函数

#常用的BIF
print(d.__dict__) #查看对象所拥有的属性

result = issubclass(Dog, Animal) #判断一个类是否是另一个类的子类
print(result)

result = isinstance(d, Dog) #判断一个实例对象是否属于一个类
print(result)

result = hasattr(d, 'name') #判断一个实例对象中是否有某个属性
print(result)

result = getattr(d, "name", "访问的参数不存在") #获取实例对象的属性值,如果不存在就赋默认值
print(result)

setattr(d, "name", "一只流浪狗") #给实例对象的属性赋值
print(getattr(d, "name"))

#delattr(d, "name") #删除实例对象的属性
3、常用的魔法方法

3.1、__new__()

作用是实例化对象时被回调的方法,优先级高于构造方法,__new__()方法要求返回一个对象的实例

#魔法方法:__new__()
class CapStr(str): #继承自字符串类
    def __new__(cls, something): #__new__()函数,当类被实例化时调用,优先于构造函数
        something = something.upper()
        return str.__new__(cls, something)

result = CapStr("i love u")
print(result)
3.2、__del__()

析构函数,和构造函数是对立的,也就是当对象被销毁时回调析构函数

#魔法方法:__del__()
class life:
    
    def __init__(self): #构造函数
        print("__init__")

    def __del__(self): #析构函数
        print("__del__")

l = life()
del l
3.3、__init()__

构造函数,一般用于初始化成员变量