python对象继承,多继承,多态,类方法,静态方法,类属性

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)

你可能感兴趣的:(python对象继承,多继承,多态,类方法,静态方法,类属性)