`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学习(八)定制类和枚举相关推荐

  1. python中的定制类(转载)

    python中的定制类(转载)<?xml version="1.0" encoding="UTF-8"?> 看到类似__slots__这种形如__x ...

  2. Python学习笔记 (类与对象)

    Python学习笔记 (类与对象) 1.类与对象 面向对象编程语言类: 一个模板, (人类)-是一个抽象的, 没有实体的对象: (eg: 张三, 李四) 属性: (表示这类东西的特征, 眼睛, 嘴巴, ...

  3. python学习之【类和对象】

    前言 五一快乐! 上一篇文章python学习--[第八弹]中,给大家介绍了python中的函数,这篇文章接着学习python中的类和对象. 我们知道,python中一切皆对象.在这篇文章开始之前,我们 ...

  4. python面向对象编程72讲_2020-07-22 Python学习笔记27类和面向对象编程

    一些关于自己学习Python的经历的内容,遇到的问题和思考等,方便以后查询和复习. 声明:本人学习是在扇贝编程通过网络学习的,相关的知识.案例来源于扇贝编程.如果使用请说明来源. 第27关 类与面向对 ...

  5. 【Python学习】导入类

    # _*_ coding:utf-8 _*_ """ name:zhangxingzai date:2022/11/20 form:<Python编程从入门到实践& ...

  6. python学习笔记(面向对象,类)

    一.类的定义 1.类的基本结构 #命名规则: 驼峰法 class Student(): # 使用class 定义类a= 1 # 变量name = '小明'def aa(self): # 函数print ...

  7. Python学习-面向对象(类)

    1 了解面向对象 Python 就是一个面向对象的编程语言 对象就是内存中用来存储指定数据的一块区间 对象的结构:每个对象当中都保存了3种数据: 1.id(标识):id是由我们的解析器生成的,在Cyt ...

  8. Python学习,元类type 反射 函数与方法 双下方法

    1.元类type type 获取对象从属于的类 python 中 一切皆对象, 类在某种意义上也是一个对象, python中自己定义的类, 以及大部分内置类, 都是由type元类(构建类)实例化得来的 ...

  9. Python 学习笔记13 类 - 继承

    我们在编程的过程中,并非都是要重头开始.比如其他人已经有现成的类,我们可以使用其他找人编写的类.术语称之为: 继承. 当一个类继承例外一个类时,它可以获得这个类的所有属性和方法:原有的类称之为 父类, ...

最新文章

  1. 虚拟机下Linux安装图解之三:Linux发行版本之Red Hat 9 安装
  2. Windows Server2008R2 域迁移
  3. 图像二值形态学——腐蚀和膨胀的C语言实现
  4. UltraEdit的使用方法
  5. java中的gridy_JAVA格局管教器.
  6. mysql 锁定表_MySQL表锁定
  7. javascript 请求web service
  8. 第一个JavaWeb项目——教室预约系统
  9. python json.dumps()函数输出json格式,使用ensure_ascii参数对中文输入的支持
  10. ​EMC存储产品介绍分析(二):大数据利器Isilon (2)
  11. [转载] Python机器学习库scikit-learn使用小结(二)
  12. Java探索之旅(18)——多线程(2)
  13. 调试技巧之调用堆栈 - Call stack
  14. cie色度图matlab,带你解读 CIE1931色度图
  15. php判断4的倍数,4的倍数特征(4的倍数特征规律怎样找)
  16. 专访弘玑Cyclone贾岿、吴楠:超自动化+流程挖掘,助力企业深度掌控完整数字业务流程走势
  17. 静电纺聚丙烯腈纳米级纤维滤膜的制备
  18. Codeforces Round #829 cf1753A Cowardly Rooks
  19. 请问如何使IE支持有swing的aaplet?
  20. java中栈的两种实现

热门文章

  1. JS之字符串连接方法join
  2. Leetcode 系列 | 反转链表
  3. pcap python 生成_python+pcap+dpkt 抓包小实例
  4. java课程课后作业190502之单词统计续集
  5. C#使用Microsoft.ACE.OLEDB.12.0 需要安装的组件
  6. 如何进行正确的SQL性能优化
  7. snapshot---caffemodel和solverstate
  8. [转]字符串匹配那些事
  9. IE(=8)版本不支持getElementsByClassName()
  10. python怎么输出表格中随机数_python 输出一个随机数