classAnimal:
def__init__(self):
"""子类初始化的时候默认调用?"""
self.name ="shit"
self.age ="123"
self.__private_num =12121;
defeat(self):
print("吃")
defpoo(self):
print("拉屎")
def__privateFunc(self):
"""私有方法不会被子类继承"""
print("animal's private function")
classDog(Animal):
"""继承功能"""
def__init__(self):
"""看来这个跟java类似,如果不显式调用父类构造,那么则不会走父类构造"""
self.sex ="田园公狗"
defbark(self):
#私有变量只能自己调用,不能以任何形式的外部对象调用
# print(super().__private_num)
print("瞎JB叫")
classGodDog(Dog):
defbark(self):
"""重写父类的方法"""
print("神狗说人话")
"""调用父类的方法,两种方式"""
# Dog.bark(self)
super().bark()
classCat(Animal):
"""继承功能"""
defcatch(self):
print("捉老鼠")
# dog = Dog()
# dog.eat()
# cat = Cat()
# cat.poo()
godDog = GodDog()
godDog.bark()
print(godDog.name)
print(godDog.sex)
#==========================================================================================
classHuman:
defeat(self):
print("eat shit")
classFather(Human):
defteach(self):
print("用 拳头 教育")
deftest1(self):
print("test1")
classMother(Human):
defteach(self):
print("用巴掌 教育")
deftest2(self):
print("test2")
classSon(Father,Mother):
pass
defteach(self):
#这样调用,默认调用第一个继承类的方法
super().teach()
Father.teach(self)
Mother.teach(self)
print("自学成材")
Human.eat(self)
son = Son()
son.teach()#这样调用,默认调用第一个继承类的方法
# son.test1()
# son.test2()
# son.eat()
#__mro__它会打印出一个类的调用顺序,也就是找属性和方法的顺序路径
# print(Son.__mro__)
#==========================================================================================
"""多态"""
classDog(object):
#类属性,相当于java的静态变量,随类走的,用类名调用
num =0
def__init__(self):
#这个age就相当于实例属性
self.age =10
Dog.num = Dog.num +1
@classmethod
defadd_num(cls):
"""类方法,由这个装饰器(注解)来标识,由类名调用"""
Dog.num +=10
@staticmethod
defmulti_num():
"""静态方法,由staticmethod来标识,这种方法可以没有参数,
其他都要有默认参数,所以它与类方法的主要区别就是有无参数^_^"""
Dog.num *=5
defprint_self(self):
print("i am a dog")
classGodDog(Dog):
def__init__(self):
super().__init__()
defprint_self(self):
print("haha this is a god dog")
defintroduce(temp):
"""多态,直到运行到这个地方的时候才知道对象是个什么东西"""
temp.print_self()
dog1 = Dog()
dog2 = GodDog()
introduce(dog1)
introduce(dog2)
#通过类名调用类方法
Dog.add_num()
#也可以通过对象来调用类方法
# dog1.add_num()
Dog.multi_num()
print(Dog.num)