class Animal(object):
def __init__(self, name, age):
self.name = name
self.age = age
def sleep(self):
print(self.name + '正在睡觉')
class Dog(Animal):
# def __init__(self,name,age):
# self.name = name
# self.age = age
# def sleep(self):
# print(self.name + '正在睡觉')
def bark(self):
print(self.name + '正在叫')
class Student(Animal):
def study(self):
print(self.name + '正在学习')
"""
Dog() 调用 __new__方法,再调用 __init__方法
Dog 里没有 __new__ 方法,会查看父类是否重写了 __new__方法
父类里也没有重写1 __new__方法,查找父类的父类,找到了 object
"""
# 调用 __init__方法,Dog类没有实现,会自动找 Animal 父类
d1 = Dog('大黄',3)
print(d1.name) # 父类里1定义的属性,子类可以直接使用
d1.sleep() # 父类的方法子类实例对象可以直接调用
d1.bark()
s1 = Student('张三',20)
s1.sleep()
s1.study()
# s1.bark()
"""**************************************************************************"""
# 继承的特点
class A(object):
def demo_a(self):
print('我是A类里的方法demo_a')
def foo(self):
print('我是A类里的方法foo')
class B(object):
def demo_b(self):
print('我是B类里的方法1demo_b')
def foo(self):
print('我是B类里的方法foo')
# python里允许多继承
class C(A,B): #我是A类里的方法foo
# class C(B,A): #我是B类里的方法foo
pass
c = C()
c.demo_a()
c.demo_b()
c.foo() #如果两个不同的父类有同名方法,会根据继承的顺序来找 深度优先
结果
<__main__.Person object at 0x029EEE90> <__main__.Person object at 0x02ABEED0> <__main__.Person object at 0x02AD50B0>
3
Process finished with exit code 0