Python学习之旅(二十)
Python基础知识(19):面向对象高级编程(Ⅱ)
定制类
形如“__xx__”的变量或函数在Python中是有特殊用途的
1、__str__
让打印出来的结果更好看
__str__:面向用户;__repr__:面向程序员
2、__iter__
使一个类能够实现for循环的功能
3、__getitem__
使类能够按照下标取元素
4、__getattr__
动态返回一个属性,当想找的属性不存在时不会报错
注:只能用在属性不存在的情况下
5、__call__
(1)直接对实例进行调用
(2)定义参数
callable:判断一个变量是否是可调用对象
>>> s=Student()
>>> callable(Student)
True
>>> callable(s)
False
>>> callable(abs)
True
>>> callable("more")
False
使用枚举类
创建枚举首先要导入Enum类
使用@unique
装饰器保证没有重复值
使用元类
type
(1)可以查看一个类型或变量的类型
(2)以返回一个对象的类型,又可以创建出新的类型
创建一个class对象,type()
函数依次传入3个参数:class的名称;继承的父类集合;class的方法名称与函数绑定
>>> class Run(object):
pass >>> class Fly(object):
pass >>> class Swim(object):
pass >>> def test(self):
print("Wow,so pretty.") >>> Duck=type("Duck",(Run,Fly,Swim),dict(hello=test))
>>> duck=Duck()
>>> duck.hello()
Wow,so pretty.
metaclass
metaclass允许创建类或者修改类
要编写一个ORM框架,所有的类都只能动态定义,这时候就需要用到metaclass
Python学习之旅(二十)的更多相关文章
- Python学习之旅(十二)
Python基础知识(11):高级特性 一.分片(切片) 通过索引来获取一定范围内的元素 #字符串 s="Alice" s[0:4:2] 结果: 'Ai' #列表 l=[1,2,3 ...
- python学习之旅(十五)
Python基础知识(14):函数(Ⅴ) 一.装饰器 decorator:本质上就是函数,可以增强函数的功能. 定义起来虽然有点复杂,但使用起来非常灵活和方便 1.不修改被装饰函数的源代码 2.不修改 ...
- python学习笔记(二十八)日志模块
我们在写程序的时候经常会打一些日志来帮助我们查找问题,这次学习一下logging模块,在python里面如何操作日志.介绍一下logging模块,logging模块就是python里面用来操作日志的模 ...
- Python学习之旅(十九)
Python基础知识(18):面向对象高级编程(Ⅰ) 使用__slots__:限制实例的属性,只允许实例对类添加某些属性 (1)实例可以随意添加属性 (2)某个实例绑定的方法对另一个实例不起作用 (3 ...
- Python学习之旅(十八)
Python基础知识(17):面向对象编程(Ⅱ) 获取对象信息 在不知道对象信息的情况下,我们想要去获取对象信息,可以使用以下方法 1.type (1)判断对象类型 >>> type ...
- python学习之旅(十六)
Python基础知识(15):模块 1.可以把模块想象成导入Python以增强其功能的扩展 2.任何程序都可以作为模块导入 3.导入模块并不意味着在导入的时候执行某些操作,它们主要用于定义变量.函数和 ...
- Python学习之旅(十四)
Python基础知识(13):函数(Ⅳ) Python内置函数 1.abs:取绝对值 abs(-1) 1 2.all:把序列中的每一个元素拿出来做布尔运算,都为真则返回True,如果序列中有None. ...
- Python学习之旅(十)
Python基础知识(9):函数(Ⅰ) Python中函数的定义:是逻辑结构和过程化的一种编程方法 定义方法: def test(x): #def:定义函数的关键字 test:函数名 x:形参,也可以 ...
- python学习笔记(二十九)为什么python的多线程不能利用多核CPU
问题:为什么python的多线程不能利用多核CPU,但是咱们在写代码的时候,多线程的确是在并发,而且还比单线程快原因:因为GIL,python只有一个GIL,运行python时,就要拿到这个锁才能执行 ...
- Python学习笔记(二十五)操作文件和目录
摘抄:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319253241 ...
随机推荐
- http重定向到https
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.we ...
- PHP知识梳理
前端 HTML.CSS. JS(DOM操作.事件操作).Jquery(选择器.属性/值操作.事件操作).ajax PHP基础 变量(类型.类型转换) 常量(系统.自定义) 运算(算术.字符串.赋值 ...
- html5学习笔记2——新元素
一:H5的改变 <canvas> 新元素 标签 描述 <canvas> 标签定义图形,比如图表和其他图像.该标签基于 JavaScript 的绘图 API 新多媒体元素 标签 ...
- [elk]elasticsearch实现冷热数据分离
本文以最新的elasticsearch-6.3.0.tar.gz为例,为了节约资源,本文将副本调为0, 无client角色 https://www.elastic.co/blog/hot-warm-a ...
- Asp.Net MVC上传图片
mvc上传图片 [HttpPost] public JsonResult Upload() { ) { ) { HttpPostedFileBase file = Request.Files[]; ) ...
- d3绘制饼状图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 高性能前端 art-template 模板
官网: https://aui.github.io/art-template/zh-cn/index.html nodejs 服务器端使用 第一步: 引入 art-template 的包 npm in ...
- ios app qbw.plist demo
qbw.plist <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC ...
- Spark On Yarn的两种模式yarn-cluster和yarn-client深度剖析
Spark On Yarn的优势 每个Spark executor作为一个YARN容器(container)运行.Spark可以使得多个Tasks在同一个容器(container)里面运行 1. Sp ...
- C++ 智能指针七
/* 智能指针weak_ptr */ #include <iostream> #include <string> #include <memory> /* weak ...