标签:back tac turn 多态 create 实现 nim rac pytho
多态:同一种事物的不同形态(一个抽象类有多个子类,因而多态的概念依赖于继承)
1. 序列类型有多种形态:字符串,列表,元组。
2. 动物有多种形态:人,狗,猪
多态性:多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同功能的函数。
多态性的例子:obj具有多态性
# 以下例子可以概括:多态性就是一个接口(函数func()),多种实现(f.func())
import abc
class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def talk(self):
        pass
class People(Animal):
    def talk(self):
        print(‘say hello‘)
class Pig(Animal):
    def talk(self):
        print(‘哼哼哼‘)
class Dog(Animal):
    def talk(self):
        print(‘汪汪汪‘)
p1=People()
p2=Pig()
p3=Dog()
def talk(obj):  # 不同的实例化对象obj调用talk()函数,结果不同
    obj.talk()
talk(p1)
talk(p2)
talk(p2)
绑定方法:绑定给谁就是给谁用的
绑定到对象的方法:
定义:凡是在类中定义的函数(没有被任何装饰器修饰),都是绑定给对象的,
给谁用:给对象用
特点:obj.bar() 自动把obj当做第一个参数传入,因为bar中的逻辑就是要处理obj
绑定到类的方法:
定义:在类中定义的,被classmethod装饰的函数就是绑定到类的方法
给谁用:给类用
特点:类.class_method() 自动把类当做第一个参数传入,因为class_method中的逻辑就是要处理类
class People:
    def __init__(self,name):
        self.name = name
    def bar(self):
        print(‘---‘,self.name)
    @classmethod
    def func(cls):
        print(cls)
f = People(‘egon‘)
print(People.func)  # 绑定给类
print(f.bar)    #绑定给对象的
People.func()
非绑定方法:用staticmethod装饰器装饰的方法
非绑定方法,就是一个函数,就是一个工具而已,不需要类,也不需对象
import hashlib
import time
class MySQL:
    def __init__(self,host,port):
        self.id=self.create_id()
        self.host=host
        self.port=port
    @staticmethod
    def create_id(): #就是一个普通工具
        m=hashlib.md5(str(time.clock()).encode(‘utf-8‘))
        return m.hexdigest()
print(MySQL.create_id) #<function MySQL.create_id at 0x0000000001E6B9D8> #查看结果为普通函数
conn=MySQL(‘127.0.0.1‘,3306)
print(conn.create_id) #<function MySQL.create_id at 0x00000000026FB9D8> #查看结果为普通函数
标签:back tac turn 多态 create 实现 nim rac pytho
原文地址:http://www.cnblogs.com/lucaq/p/7127412.html