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学习之旅(二十)的更多相关文章

  1. Python学习之旅(十二)

    Python基础知识(11):高级特性 一.分片(切片) 通过索引来获取一定范围内的元素 #字符串 s="Alice" s[0:4:2] 结果: 'Ai' #列表 l=[1,2,3 ...

  2. python学习之旅(十五)

    Python基础知识(14):函数(Ⅴ) 一.装饰器 decorator:本质上就是函数,可以增强函数的功能. 定义起来虽然有点复杂,但使用起来非常灵活和方便 1.不修改被装饰函数的源代码 2.不修改 ...

  3. python学习笔记(二十八)日志模块

    我们在写程序的时候经常会打一些日志来帮助我们查找问题,这次学习一下logging模块,在python里面如何操作日志.介绍一下logging模块,logging模块就是python里面用来操作日志的模 ...

  4. Python学习之旅(十九)

    Python基础知识(18):面向对象高级编程(Ⅰ) 使用__slots__:限制实例的属性,只允许实例对类添加某些属性 (1)实例可以随意添加属性 (2)某个实例绑定的方法对另一个实例不起作用 (3 ...

  5. Python学习之旅(十八)

    Python基础知识(17):面向对象编程(Ⅱ) 获取对象信息 在不知道对象信息的情况下,我们想要去获取对象信息,可以使用以下方法 1.type (1)判断对象类型 >>> type ...

  6. python学习之旅(十六)

    Python基础知识(15):模块 1.可以把模块想象成导入Python以增强其功能的扩展 2.任何程序都可以作为模块导入 3.导入模块并不意味着在导入的时候执行某些操作,它们主要用于定义变量.函数和 ...

  7. Python学习之旅(十四)

    Python基础知识(13):函数(Ⅳ) Python内置函数 1.abs:取绝对值 abs(-1) 1 2.all:把序列中的每一个元素拿出来做布尔运算,都为真则返回True,如果序列中有None. ...

  8. Python学习之旅(十)

    Python基础知识(9):函数(Ⅰ) Python中函数的定义:是逻辑结构和过程化的一种编程方法 定义方法: def test(x): #def:定义函数的关键字 test:函数名 x:形参,也可以 ...

  9. python学习笔记(二十九)为什么python的多线程不能利用多核CPU

    问题:为什么python的多线程不能利用多核CPU,但是咱们在写代码的时候,多线程的确是在并发,而且还比单线程快原因:因为GIL,python只有一个GIL,运行python时,就要拿到这个锁才能执行 ...

  10. Python学习笔记(二十五)操作文件和目录

    摘抄:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319253241 ...

随机推荐

  1. 巧用watch命令执行循环操作,来解放我们的双手

    有时候我们需要重复执行某个 命令,观察某个文件和某个结果的变化情况.可以写 脚本去实现这些需求,但是有更简单的方法,本文档要介绍的就是watch 命令. 1. 以固定时间反复执行某个命令 root@j ...

  2. CentOS7本地安装MySQL5.7

    操作系统:3.10.0-514.el7.x86_64 安装包:mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz 1:检查是否安装了 libaio(centos7默认 ...

  3. 听闻 kubernetes,快速了解一番

    看到 各位 大厂都在用这个,  而本人最多是用yarn 做些ML的事情,   赶快了解一下, 先扫盲记录一下. 一.名称趣闻 kubernetes缩写为k8s, 阿哈 ,原来是:k8s,意思就是k后面 ...

  4. Swift 拷贝文件夹,实现文件夹内容整体复制

    我们知道,在沙盒内,iOS要拷贝一个文件,可以使用 fileManager.copyItem(atPath: fullPath, toPath: fulltoPath) 方法简单实现,不过当我们要拷贝 ...

  5. 实战UITableview深度优化

    演示项目下载地址:https://github.com/YYProgrammer/YYTableViewDemo 项目里的低性能版是常规写法实现的tableview,高性能版是做了相关优化后的tabl ...

  6. app优化之流量节省

    前言:“客户端上传时间戳”的玩法,你玩过么?一起聊聊时间戳的奇技淫巧!,其实这个类似于数据版本号的东西. 缘起:无线时代,流量敏感.APP在登录后,往往要向服务器同步非常多的数据,很费流量,技术上有没 ...

  7. why-the-default-authentication-hadoop-is-unsecured ?

    https://www.learningjournal.guru/article/hadoop/hadoop-security-using-kerberos/ https://stackoverflo ...

  8. [HDFS Manual] CH4 HDFS High Availability Using the Quorum Journal Manager

    HDFS High Availability Using the Quorum Journal Manager HDFS High Availability Using the Quorum Jour ...

  9. Caffe 分类问题 Check failed: error == cudaSuccess (2 vs. 0) out of memory

    如果图片过大,需要适当缩小batch_size的值,否则使用GPU时可能超出其缓存大小而报错

  10. 配置gradle的daemon

    文档里提到,配置Daemon,能够加速gradle的构建,为了获取这个性能提上,我也得开启这个Daemon. 在Windows环境下:,可以执行这个命令 (if not exist "%US ...