python学习(八)定制类和枚举
`python`定制类主要是实现特定功能,通过在类中定义特定的函数完成特定的功能。
class Student(object):def __init__(self, name):self.name =namestudent = Student("lilei") print(student)
`实现定制类`
class Student(object):def __init__(self, name):self.name = namedef __str__(self):return ("self name is %s" %(self.name))student2 = Student("hanmeimei") print(student2)
实现`__str__`函数,可以在print类对象时打印指定信息
通过实现`__iter__`和`__next__`同样可以使类对象产生可迭代序列,下面实现了`斐波那契数列`
class Fib(object):def __init__(self):self.a , self.b = 0,1def __iter__(self):return selfdef __next__(self):self.a, self.b = self.b, self.a+ self.bf self.a > 30:raise StopIteration()return self.a
打印输出
for n in Fib():print(n)
可以实现`__getitem__`函数,这样就可以按照索引访问类对象中迭代元素了。
class OddNum(object):def __init__(self):self.num = -1def __iter__(self):return selfdef __next__(self):self.num = self.num +2if self.num > 10:raise StopIteration()return self.num def __getitem__(self,n):temp = 1for i in range(n):temp += 2return temp
for n in OddNum():print(n)oddnum = OddNum() print(oddnum[3])
可以进一步完善OddNum类的`__getitem__`函数,使其支持`切片处理`
def __getitem__(self, n):if isinstance(n ,int):temp =1for i in range(n):temp +=2return tempif isinstance(n, slice):start = n.startend = n.stopif start is None:start = 0tempList = []temp = 1for i in range(end):if i >= start:temp += 2tempList.append(temp)return tempList
`print(oddnum[1:4])`
通过实现`__getattr__`函数,可以在类对象中没有某个属性时,自动调用`__getattr__`函数
实现`__call__`函数,可以实现类对象的函数式调用
def __getattr__(self,attr):if attr == 'name':return 'OddNum'if attr == 'data':return lambda:self.numraise AttributeError('\'OddNum\' object has no attribute \'%s\'' %attr) def __call__(self):return "My name is OddNum!!"
只有在没有找到属性的情况下,才调用`__getattr__`,已有的属性不会在`__getattr__`中查找。
print(oddnum.name) print(oddnum.data) #没有func函数会抛出异常 #print(oddnum.func) #可以直接通过oddnum()函数式调用 print(oddnum())
下面是廖雪峰官方网站上的一个链式转化例子,用到了这些特定函数
class Chain(object):def __init__(self, path=''):self.path = pathdef __getattr__(self,attr):return Chain('%s/%s'%(self.path, attr))def users(self, users):return Chain('%s/users/%s' %(self.path, users))def __str__(self):return self.path__repr__ = __str__print(Chain().users('michael').repos)
class Chain(object):def __init__(self, path=''):self.path = pathdef __getattr__(self,attr):return Chain('%s/%s'%(self.path, attr))def __call__(self, param):return Chain('%s/%s'%(self.path, param))def __str__(self):return self.path__repr__ = __str__print(Chain().get.users('michael').group('doctor').repos)
python同样支持`枚举`操作
from enum import EnumMonth = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))for name, member in Month.__members__.items():print(name, '=>', member, ',', member.value)from enum import Enum Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec') ) for name, member in Month.__members__.items():print(name, '=>', member, ',', member.value)from enum import unique @unique class Weekday(Enum):Sun = 0 # Sun的value被设定为0Mon = 1Tue = 2Wed = 3Thu = 4Fri = 5Sat = 6for name , member in Weekday.__members__.items():print(name, '=>', member, ',', member.value)
我的微信公众号:
转载于:https://www.cnblogs.com/secondtonone1/p/7458805.html
python学习(八)定制类和枚举相关推荐
- python中的定制类(转载)
python中的定制类(转载)<?xml version="1.0" encoding="UTF-8"?> 看到类似__slots__这种形如__x ...
- Python学习笔记 (类与对象)
Python学习笔记 (类与对象) 1.类与对象 面向对象编程语言类: 一个模板, (人类)-是一个抽象的, 没有实体的对象: (eg: 张三, 李四) 属性: (表示这类东西的特征, 眼睛, 嘴巴, ...
- python学习之【类和对象】
前言 五一快乐! 上一篇文章python学习--[第八弹]中,给大家介绍了python中的函数,这篇文章接着学习python中的类和对象. 我们知道,python中一切皆对象.在这篇文章开始之前,我们 ...
- python面向对象编程72讲_2020-07-22 Python学习笔记27类和面向对象编程
一些关于自己学习Python的经历的内容,遇到的问题和思考等,方便以后查询和复习. 声明:本人学习是在扇贝编程通过网络学习的,相关的知识.案例来源于扇贝编程.如果使用请说明来源. 第27关 类与面向对 ...
- 【Python学习】导入类
# _*_ coding:utf-8 _*_ """ name:zhangxingzai date:2022/11/20 form:<Python编程从入门到实践& ...
- python学习笔记(面向对象,类)
一.类的定义 1.类的基本结构 #命名规则: 驼峰法 class Student(): # 使用class 定义类a= 1 # 变量name = '小明'def aa(self): # 函数print ...
- Python学习-面向对象(类)
1 了解面向对象 Python 就是一个面向对象的编程语言 对象就是内存中用来存储指定数据的一块区间 对象的结构:每个对象当中都保存了3种数据: 1.id(标识):id是由我们的解析器生成的,在Cyt ...
- Python学习,元类type 反射 函数与方法 双下方法
1.元类type type 获取对象从属于的类 python 中 一切皆对象, 类在某种意义上也是一个对象, python中自己定义的类, 以及大部分内置类, 都是由type元类(构建类)实例化得来的 ...
- Python 学习笔记13 类 - 继承
我们在编程的过程中,并非都是要重头开始.比如其他人已经有现成的类,我们可以使用其他找人编写的类.术语称之为: 继承. 当一个类继承例外一个类时,它可以获得这个类的所有属性和方法:原有的类称之为 父类, ...
最新文章
- 虚拟机下Linux安装图解之三:Linux发行版本之Red Hat 9 安装
- Windows Server2008R2 域迁移
- 图像二值形态学——腐蚀和膨胀的C语言实现
- UltraEdit的使用方法
- java中的gridy_JAVA格局管教器.
- mysql 锁定表_MySQL表锁定
- javascript 请求web service
- 第一个JavaWeb项目——教室预约系统
- python json.dumps()函数输出json格式,使用ensure_ascii参数对中文输入的支持
- ​EMC存储产品介绍分析(二):大数据利器Isilon (2)
- [转载] Python机器学习库scikit-learn使用小结(二)
- Java探索之旅(18)——多线程(2)
- 调试技巧之调用堆栈 - Call stack
- cie色度图matlab,带你解读 CIE1931色度图
- php判断4的倍数,4的倍数特征(4的倍数特征规律怎样找)
- 专访弘玑Cyclone贾岿、吴楠:超自动化+流程挖掘,助力企业深度掌控完整数字业务流程走势
- 静电纺聚丙烯腈纳米级纤维滤膜的制备
- Codeforces Round #829 cf1753A Cowardly Rooks
- 请问如何使IE支持有swing的aaplet?
- java中栈的两种实现
热门文章
- JS之字符串连接方法join
- Leetcode 系列 | 反转链表
- pcap python 生成_python+pcap+dpkt 抓包小实例
- java课程课后作业190502之单词统计续集
- C#使用Microsoft.ACE.OLEDB.12.0 需要安装的组件
- 如何进行正确的SQL性能优化
- snapshot---caffemodel和solverstate
- [转]字符串匹配那些事
- IE(=8)版本不支持getElementsByClassName()
- python怎么输出表格中随机数_python 输出一个随机数