python 之 面向对象(多态性、装饰器方法 内置函数补充)
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 之 面向对象(多态性、装饰器方法 内置函数补充)的更多相关文章
- python笔记5:装饰器、内置函数、json
装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...
- 文成小盆友python-num4 装饰器,内置函数
一 .python 内置函数补充 chr() -- 返回所给参数对应的 ASCII 对应的字符,与ord()相反 # -*- coding:utf-8 -*- # Author:wencheng.z ...
- python学习笔记:第14天 内置函数补充和递归
一.匿名函数 匿名函数主要是为了解决一些简单需求而设计的一种函数,匿名函数的语法为: lambda 形参: 返回值 先来看一个例子: # 计算n的n次方 In[2]: lst = lambda n: ...
- 万恶之源 - Python装饰器及内置函数
装饰器 听名字应该知道这是一个装饰的东西,我们今天就来讲解一下装饰器,有的铁子们应该听说,有的没有听说过.没有关系我告诉你们这是一个很神奇的东西 这个有多神奇呢? 我们先来复习一下闭包 def fun ...
- Python装饰器及内置函数
装饰器 听名字应该知道这是一个装饰的东西,我们今天就来讲解一下装饰器,有的铁子们应该听说,有的没有听说过.没有关系我告诉你们这是一个很神奇的东西 这个有多神奇呢? 我们先来复习一下闭包 def fun ...
- 【Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数】
一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(Firs ...
- Python装饰器、内置函数之金兰契友
装饰器:装饰器的实质就是一个闭包,而闭包又是嵌套函数的一种.所以也可以理解装饰器是一种特殊的函数.因为程序一般都遵守开放封闭原则,软件在设计初期不可能把所有情况都想到,所以一般软件都支持功能上的扩展, ...
- Python--函数对象@命名空间与作用域@包函数@装饰器@迭代器@内置函数
一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(Firs ...
- day0318装饰器和内置函数
一.装饰器 1.装饰器: 解释:装饰器的本事就是一个函数,不改动主代码的情况下,增加新功能.返回值也是一个函数对象. 2.装饰器工作过程 import time def func(): print(' ...
随机推荐
- Mybatis异常-java.lang.IllegalArgumentException: invalid comparison:java.util.Date and java.lang.String
原因:在Mapper.xml中对非字符串类型的数据进行了是否为空判断,如date类型的数据Create_Date != '',decimal类型的数据price != ''都会报这个错误 只有字符串才 ...
- 将WSL2作为生产力工具
适用于 Linux 的 Windows 子系统 (WSL) 是 Windows 10新增的功能,使用它可以直接在 Windows 上运行 Linux 命令.而WSL 2 是WSL的一个新版本,它支持适 ...
- Cheat Engine TUTORIAL 教程 (8个步骤)
https://www.cnblogs.com/ae6623/archive/2011/04/16/4416874.html https://www.52pojie.cn/thread-828030- ...
- Data Governance Solution
如何有效地进行数据治理 | 人人都是产品经理http://www.woshipm.com/data-analysis/746223.html ##普元元数据管理(MetaCube)产品-白皮书.doc ...
- openresty开发系列4--nginx的配置文件说明
openresty开发系列4--nginx的配置文件说明 Nginx基本配置 Nginx的主配置文件是:nginx.conf,nginx.conf主要组成如下: # 全局区 有一个工作子进程,一般 ...
- percona-mysql5.7.24使用xtrabackup工具配置主从同步
主从配置详细过程: 环境准备: 配置好服务器,主从服务器都安装并启动mysql数据库 # 添加读写账号和只读账号,应用配置中,写主库用读写账号,统计从库数据yoga只读账号 grant select, ...
- libfacedetection 人臉識別
计算相似度,然后比对 QVector<cv::Point> vec_point1 = facedetect_frontal_surveillance4(face_img.clone()); ...
- Django Timezone 处理
https://blog.csdn.net/qq_37049781/article/details/79347278 Django 中的时区在现实环境中,存在有多个时区.用户之间很有可能存在于不同的时 ...
- apt-get和yum
1.apt-get是dpkg系的,或者说debian系的,如ubuntu 2.yum是红帽系的,如中标麒麟
- 转 mysql awr 报告
1. https://github.com/noodba/myawr 2. https://www.cnblogs.com/zhjh256/p/5779533.html