类的复习总结

本文介绍了Python中的枚举类,包括枚举的定义、重载运算符、对象构造与销毁、逻辑运算符、迭代、类描述符等。同时,讲解了动态类型的概念,通过示例展示了如何使用`type`动态创建类并添加方法。此外,还探讨了元类`MetaClass`的使用,展示如何通过元类控制类的行为,如添加新的方法。
摘要由CSDN通过智能技术生成

枚举类

重载的定义概念

对象构造与销毁

1.构造 init
2.销毁 del

算数运算符

1.+:
add默认加法
+=:iadd
右边加法:radd

2.- * /:&:
__ add __:加运算
__ sub __:减运算
__ mul __:乘运算
__ div __:除运算
__ mod __:求余运算
__ pow __:乘方
   
3.类描述运算符:
__ str __:默认是地址,修改显示类的信息
__ repr __默认是地址,修改类的信息,repr

4.逻辑运算符:
1.__ or , and , not :对象逻辑运算,|代表 or ,&代表 and __
2.__ bool __:对象转化为True,False

5.__ call __:对象名当做函数名称
__ getitem __ 索引运算 X[key], X[i:j]
__ setitem __ 索引赋值语句 X[key], X[i:j]=sequence
__ delitem __ 索引和分片删除 del X[key], del X[i:j]
__ len __长度 len(X) 如果没有 __ bool __ , 真值测试

6.处理类中的列表
__ contains __成员关系测试 item in X(任何可迭代)

7 . 关系运算符,对象的排序
1.__ it __, __gt , le , ge , eq , ne __
在这里插入图片描述

8.迭代
__ iter , next __:生成器

9.with as自动打开关闭:
__ enter , exit __

非重点运算符

1.__ index __:hex(X) bin(X) oct(X)
2.__new __:软件测试,软件升级,新建其他对象
3.类的属性操作
__ getattr __:点号运算 X.undefined
__ setattr __:属性赋值语句 X.any=value
__ delattr __:属性删除 del X.any
__ getattribute __:属性获取 X.any
4.类对象操作
__ get __, __set __, __delete __
5. 函数参数
*arg 元组
** arg 字典

枚举类一个例子

我们主要是导入enum这个模块,@enum.unique#定义一个枚举的类型,有点类似装饰器的感觉,不然为啥导入这个模块还得@一下。enum定义下的对象要从小到大排序。


import enum  #枚举

@enum.unique#定义一个枚举的类型
class 象棋(enum.Enum): #枚举类,12月份,星期7天,
    未过河兵=1  #可以是实数,必须是有序,从小到大
    过河底兵=2
    过河兵=3=4.5=5=10=11=20=1000

棋子1=象棋.print(棋子1)
print(象棋.)
print(象棋..value)
print(象棋..value>棋子1.value)
#print(象棋.帅>棋子1)#重载
print(棋子1==象棋.)
print(棋子1!=象棋.)
for  name ,member in 象棋.__members__.items():
    print(name,member,member.value)

type动态创造类型

通过截图可知道,色狼动态创建了show与lovename,从结果来看色狼是属于type类型,王毅是对色狼的初始化,那么就是新建的一个类叫色狼,此时我们再给王毅增加一个money,可以知道穿建了一个原来没有的属性。

def  show(self,name):
    print("我是一个色狼我的名字是"+name)
def  love(self,name,lovename):
    print("我是一个色狼我的名字是"+name+"我爱"+lovename)
#'色狼'是类的名字,(object父类)  dict字典
色狼=type('色狼',(object,),dict(showname=show,lovename=love)) #创造一个类,
王毅=色狼()#初始化
王毅.showname("王毅") #调用了show方法
王毅.lovename("王毅","春哥")
王毅.money=3000
print(王毅.money)
print(type(色狼)) #动态类型
print(type(王毅))#动态创造了类型

在这里插入图片描述

MetaClass

通过截图来看,我们创造了一个ListMetaClass类,我们调用Mydict()会发现打印了Mylist跟Mydict。所以我发现只要元组metaclass是相同的,就会都被调用,也能发现我们调用Mydict最后出来的格式是{‘hello’: ‘world’}字典类型。同理Mylist出来的是一个list列表。


class  ListMetaClass(type):#继承动态类型
    #name类型名称,bases继承的父亲类,attr属性字典
    def __new__(cls,name,bases,attr):
        print(cls)#当前类的名称
        print(name)#类的名字
        print(bases)#继承的父亲类
        print(attr)#属性
        #attr["add"]=lambda  self,value:self.append(value);#添加
        attr["show"]=lambda self :print(self);#显示
        return  type.__new__(cls,name,bases,attr)


#继承list, 元类 metaclass=ListMetaClass
class Mylist(list,metaclass=ListMetaClass):
    pass

#继承dict, 元类 metaclass=ListMetaClass
class Mydict(dict,metaclass=ListMetaClass):
    pass

'''
ourlist=Mylist()
ourlist.add(11)
ourlist.add(12)
ourlist.add(13)
ourlist.add(14)
ourlist.show()
'''
mydict=Mydict()
mydict["hello"]="world"
mydict.show()

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青灯有味是儿时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值