7.6 多态性

1 什么是多态性 多态指的是同一种事物多种形态,在程序中用继承可以表现出多态。多态性:可以在不用考虑对象具体类型的前提下而直接使用对象下的方法

2、为什要用多态 用基类创建一套统一的规则,强制子类去遵循(使用抽象类实现),可以在不考虑对象具体的类的情况下直接参考基类的标准使用对象

import abc                             #abstract class
class Animal(metaclass=abc.ABCMeta):
@abc.abstractmethod
def eat(self):
pass
@abc.abstractmethod
def drink(self):
pass
@abc.abstractmethod
def run(self):
pass
@abc.abstractmethod
def bark(self):
pass
# obj=Animal() # 抽象基类本身不能被实例化 class Cat(Animal):
def eat(self):
print('cat eat')
def drink(self):
print('cat drink')
def run(self):
print('cat run')
def bark(self):
print('喵喵喵') class Dog(Animal):
def eat(self):
print('dog eat')
def drink(self):
print('dog drink')
def run(self):
print('dog run')
def bark(self):
print('汪汪汪')
c=Cat()
d=Dog()
p=Pig() c.bark() #喵喵喵
d.bark() #汪汪汪
p.bark() #哼哼哼

7.7 绑定到类的方法 classmethod

将类中的一个函数绑定给类

绑定到类的方法特殊之处: 应该由类来调用,类来调用,会自动将类当作第一个参数传入

import settings                         #settings内存入NAME='lxx'和AGE=30
class People:
def __init__(self,name,age):
self.name=name
self.age=age

def tell(self):
print('%s:%s' %(self.name,self.age))

@classmethod #添加装饰器后不用再传值,会自动传入
def from_conf(cls):
return cls(settings.NAME,settings.AGE)
#p4=People.from_conf(People)
print(People.from_conf) #在没有添加装饰器前得到函数地址,添加后得到绑定方法
p4=People.from_conf()
p4.tell() #lxx: 30

7.8 非绑定方法 staticmethod

将类中的一个函数解除绑定

特性:既不跟类绑定,也不跟对象绑定,这意味着谁都能用谁来用都是一个普通函数,也就是说没有自动传值的特性

import hashlib
import time
class People:
def __init__(self,name,age):
self.uid=self.create_id()
self.name=name
self.age=age

def tell(self):
print('%s: %s:%s' %(self.uid,self.name,self.age)) @staticmethod #添加staticmethod:非绑定方法,就是一个普通函数 ,不会自动传值
def create_id():
m=hashlib.md5()
m.update(str(time.clock()).encode('utf-8'))
return m.hexdigest()

obj=People('egon',18)
print(obj.uid,obj.name,obj.age) #9fbd3ac399adea6bbee8d9d5701b17e4 egon 18
print(obj.create_id) #<function People.create_id at 0x0000028449338268>
print(People.create_id) #<function People.create_id at 0x0000028449338268>

print(obj.create_id()) #3ae1b28e5eef6c45294713de36dd1a3f
print(People.create_id()) #c8134ea8e08cab3f68d4fa9622a30f8c

7.9 内置函数补充

isinstance(对象,类):判断一个对象是否是一个类的实例

class Foo:
pass

obj=Foo()
print(isinstance(obj,Foo)) #Ture # 推荐使用该函数来判断一个函数的类型
print(isinstance('abc',str))
print(isinstance(123,int))

issubclass(子类,父类):判断一个类是否是另一个类的子类

print(issubclass(Foo,object))   #True

python 之 面向对象(多态性、装饰器方法 内置函数补充)的更多相关文章

  1. python笔记5:装饰器、内置函数、json

    装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...

  2. 文成小盆友python-num4 装饰器,内置函数

    一 .python 内置函数补充 chr()  -- 返回所给参数对应的 ASCII 对应的字符,与ord()相反 # -*- coding:utf-8 -*- # Author:wencheng.z ...

  3. python学习笔记:第14天 内置函数补充和递归

    一.匿名函数 匿名函数主要是为了解决一些简单需求而设计的一种函数,匿名函数的语法为: lambda 形参: 返回值 先来看一个例子: # 计算n的n次方 In[2]: lst = lambda n: ...

  4. 万恶之源 - Python装饰器及内置函数

    装饰器 听名字应该知道这是一个装饰的东西,我们今天就来讲解一下装饰器,有的铁子们应该听说,有的没有听说过.没有关系我告诉你们这是一个很神奇的东西 这个有多神奇呢? 我们先来复习一下闭包 def fun ...

  5. Python装饰器及内置函数

    装饰器 听名字应该知道这是一个装饰的东西,我们今天就来讲解一下装饰器,有的铁子们应该听说,有的没有听说过.没有关系我告诉你们这是一个很神奇的东西 这个有多神奇呢? 我们先来复习一下闭包 def fun ...

  6. 【Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数】

    一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(Firs ...

  7. Python装饰器、内置函数之金兰契友

    装饰器:装饰器的实质就是一个闭包,而闭包又是嵌套函数的一种.所以也可以理解装饰器是一种特殊的函数.因为程序一般都遵守开放封闭原则,软件在设计初期不可能把所有情况都想到,所以一般软件都支持功能上的扩展, ...

  8. Python--函数对象@命名空间与作用域@包函数@装饰器@迭代器@内置函数

    一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(Firs ...

  9. day0318装饰器和内置函数

    一.装饰器 1.装饰器: 解释:装饰器的本事就是一个函数,不改动主代码的情况下,增加新功能.返回值也是一个函数对象. 2.装饰器工作过程 import time def func(): print(' ...

随机推荐

  1. outlook alias

    Add an email address Go to Add an alias. Sign in to your Microsoft account, if prompted. Under Add a ...

  2. MVC框架的主要问题是什么?

    以下是MVC框架的一些主要问题: 对 DOM 操作的代价非常高 程序运行缓慢且效率低下 内存浪费严重 由于循环依赖性,组件模型需要围绕 models 和 views 进行创建

  3. 胶囊网络 -- Capsule Networks

    胶囊网络是 vector in vector out的结构,最后对每个不同的类别,输出不一个向量,向量的模长表示属于该类别的概率. 例如,在数字识别中,两个数字虽然重叠在一起,Capsule中的两个向 ...

  4. 007 搜索API

    1.说明 这个API用于在elasticsearch中搜索内容,用户可以通过发送以查询字符串为参数的get请求进行搜索,也可以在post请求的消息体中进行查询. 2.多索引 允许搜索所有的索引或某些特 ...

  5. Beacon Designer 8.14 下载及破解

    先安装 Beacon Designer 8.14 下载地址 http://1.download.minixiazai.com/pc/Beacon.Designer.8_po.ziphttp://www ...

  6. Xadmin权限管理

    需求分析: 1.判断用户是否登陆,未登陆就不能进入其他页面2.为用户分配不同的权限,用户的操作只能在权限范围之内3.将用户可操作的权限显示在页面山,点击能进入该页面操作 模型表的建立 1.对每个用户建 ...

  7. linux非root用户安装rabbitmq

    因为rabbitmq是用erlang语言写的,所以装rabbitmq前第一步得先装erlang. 我们到erlang官网https://www.erlang.org/downloads下载安装包,最新 ...

  8. 数据分析入门——IPython入门

    一.什么是IPython IPython的开发者吸收了标准解释器的基本概念,在此基础上进行了大量的改进,创造出一个令人惊奇的工具.在它的主页上是这么说的:“这是一个增强的交互式Python shell ...

  9. 123457123456#2#----com.MCgame.ShuXueKoSuan98--前拼后广--儿童小学数学口算Game-mc22222

    com.MCgame.ShuXueKoSuan98--前拼后广--儿童小学数学口算Game-mc

  10. ABAP函数篇2 测试DATE_CONVERT_TO_FACTORYDATE

    DATE_CONVERT_TO_FACTORYDATE   根据日期返回工厂日历日期 函数功能说明: 标出工作日的计算方法 输入传输 CORRECT_OPTION = '+'如果指定的日期不是工作日, ...