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()__
构造函数,一般用于初始化成员变量