class多态

多态代码实现:

class Animal(object):
def __init__(self, name): # Constructor of the class
self.name = name

def talk(self): # Abstract method, defined by convention only
print('the is Animal talk function')
pass #raise NotImplementedError("Subclass must implement abstract method")

# @staticmethod #不写@staticmethod obj 就是self,就不是一个需要传递的参数
def animal_talk(obj):
obj.talk()

class Cat(Animal):
def talk(self):
print('Meow!')


class Dog():
def talk(self):
print('Woof! Woof!')


d = Dog()
#d.talk()

c = Cat("xu")
#c.talk()
#
# def animal_talk(obj):
# obj.talk()

#同一个接口,不同的实现
Animal.animal_talk(c)  #调用对象c中的talk()
Animal.animal_talk(d)  #调用对象d中的talk()

X = Animal('alex') #X是 Animal类的实例化对象
Z = Animal #Z 是Animal类的内存地址
print(X)
print(Z)

# X.animal_talk(c)
Animal('alex').animal_talk() #调用自己的方法,self 不用写
X.animal_talk() #调用自己的方法,self 不用写
Z.animal_talk(c)

# Animal('alex1').animal_talk(c) #@staticmethod 这行不注释,这行才不报错

面向对象的特性:封装、继承、多态;

多态:
多态是面向对象的重要特性,简单点说:“一个接口,多种实现”;就是同一个方法调用不同对象,结果不一样。

封装:
封装,也就是把客观事物封装成抽象的类,并且类可以把自己的属性和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

继承:
一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承;继承可以扩展已存在的代码模块(类);

参考:
https://www.cnblogs.com/alex3714/articles/5188179.html
原文地址:https://www.cnblogs.com/lighthouse/p/9645444.html