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. kafka集群搭建(图文并用)

    将安装包上传服务器并解压 scp kafka_2.11-1.0.0.tgz username@{ip}:~/. mkdir /usr/local/kafka mv kafka_2.11-1.0.0.t ...

  2. ubuntu之路——day11.2 快速搭建系统并进行迭代、在不同的划分上进行训练和测试

    快速搭建系统并进行迭代 1.建立dev/test set,并确定你的目标 2.快速建立初始化的系统 3.使用前面提到的bias/variance分析和错误分析来进行模型优化和迭代 针对以上的过程,An ...

  3. ubuntu之路——day10.6 如何理解人类表现和超过人类表现

    从某种角度来说,已知的人类最佳表现其实可以被当做贝叶斯最优错误,对于医学图像分类可以参见下图中的例子. 那么如何理解超过人类表现,在哪些领域机器已经做到了超越人类呢?

  4. java高级开发

    (转载)博客原文链接:https://www.cnblogs.com/java1024/p/8594784.html 一.面试题基础总结 1. JVM结构原理.GC工作机制详解 答:具体参照:JVM结 ...

  5. Hive的配置详解和日常维护

    Hive的配置详解和日常维护 一.Hive的参数配置详解 1>.mapred.reduce.tasks  默认为-1.指定Hive作业的reduce task个数,如果保留默认值,则Hive 自 ...

  6. could not find 'gopls

    安装go tools 安装以上后用vim打开go代码,使用函数跳转时会出现: E718: Funcref requiredvim-go: could not find 'gopls'. Run :Go ...

  7. JEECG hibernate.hbm2ddl.auto

    配置hibernate根据实体类自动建表功能 - lixuyuan的专栏 - CSDN博客https://blog.csdn.net/lixuyuan/article/details/8057119 ...

  8. centos6.8安装python3.7.3报错Can't connect to HTTPS URL because the SSL module is not available问题解决

    环境:CentOS release 6.8 (Final) # 直接编译python3.7在使用pip3安装依赖的时候报错: Can't connect to HTTPS URL because th ...

  9. 《楞严经四种清净明诲》 (转自学佛网:http://www.xuefo.net/nr/article56/559965.html)

    <楞严经四种清净明诲> 佛告阿难:“汝常闻我毗奈耶中,宣说修行三决定义.所谓摄心为戒,因戒生定,因定发慧,是则名为三无漏学. “阿难,云何摄心,我名为戒? “若诸世界六道众生其心不淫,则不 ...

  10. 关于PF_INET和AF_INET的区别

    在写网络程序的时候,建立TCP socket:   sock = socket(PF_INET, SOCK_STREAM, 0);然后在绑定本地地址或连接远程地址时需要初始化sockaddr_in结构 ...