继承
继承用于类的创建上,新创建的叫子类,而被继承的叫做父类。子类可以使用父类属性,继承是描述类与类之间的关系。
在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类。
1、继承
class A():
def __init__(self):
self.name = '张楠'
def test_a(self):
print("张楠大帅哥")
class B(A):
def __init__(self):
self.name = '飞扬'
def test_b(self):
self.test_a()
print("飞扬大帅哥")
obj = B()
obj.test_b()
输出结果为:
例子中,B类只继承A类的方法。在B类中用self.test_a()即可调用A类的test_a()方法。
在这个例子中,类B继承了类A,因此类B的实例对象可以访问类A中的方法和属性。当在类B的方法中使用self.test_a()时,self代表类B的实例对象,因此可以调用类A中的test_a方法。
当调用self.test_a()时,程序会查找类B中是否存在test_a方法。如果类B中没有定义test_a方法,它会继续查找父类A中是否存在该方法。因为类B继承了类A,所以可以找到并调用父类A中的test_a方法。
因此,self.test_a()可以成功调用父类A中的test_a方法,并打印出"张楠大帅哥"这个结果。
2、方法重写
在某些场景下,子类继承了父类的属性和方法,但子类有同名的方法,这时候就需要重写子类的方法了。
class A():
def __init__(self):
self.a = 'a'
def test(self):
print("张楠大帅哥")
class B(A):
def __init__(self):
self.b = 'b'
super().__init__()
def test(self):
print("飞扬大帅哥")
obj=B()
obj.test()
输出结果为:
例子中B类继承A类的属性和test()方法,但B也有test方法,那么只需要在B类中重新定义个test()方法即可。
子类和父类都有这个方法,那么调用的时候就会优先调用子类的方法。
3、super(父类)方法
子类和父类有相同的方法,如果子类想调用父类相同的的方法。可以使用super()方法。
super默认省略了两个参数 第一个参数是类名,第二个参数是self。两个参数可以省略不传递例如 super(Student,self)
class People(object):
def __init__(self, name):
self.name = name
def greet(self):
print('Hello, I am %s.' % self.name)
class Student(People):
def greet(self):
super(Student, self).greet() #调用父类People的greet方法
print('帅帅帅。。。')
d=Student("张楠")
d.greet()
输出结果为:
调用方法的时候会先调用父类的方法。
1、子类中调用父类的初始化方法了。
super 的一个最常见用法可以说是在子类中调用父类的初始化方法了。
class Base(object):
def __init__(self, a, b):
self.a = a
self.b = b
class A(Base):
def __init__(self, a, b, c):
super(A, self).__init__(a, b) # Python3 可使用 super().__init__(a, b)
self.c = c
a=A(100,200,300)
print("a=%d, b=%d, c=%d" % (a.a,a.b,a.c))
输出结果为:
2、深入super()的应用
class Base(object):
def __init__(self):
print("enter Base")
print("leave Base")
class A(Base):
def __init__(self):
print("enter A")
super(A,self).__init__()
print("leave A")
class B(Base):
def __init__(self):
print("enter B")
super(B,self).__init__()
print("leave B")
class C(A,B):
def __init__(self):
print("enter C")
super(C,self).__init__()
print("leave C")
c=C()
输出结果为:
这个代码的运行情况