Python学习第八章:Python类的特殊方法

8.1 常见的特殊方法

8.1.1 重写__repr__方法

repr()是一个特殊的方法,它是一个自我描述的方法,通常用于告诉外界这个对象的细节信息,一般而言可以对这个方法进行重写,当打印这个方法的 对象时候,会得到其描述信息。

#__repr__()
class Apple:
    def __init__(self,weight,color):
        self.weight =weight
        self.color = color

    def __repr__(self):
        return 'Apple[weight = '+str(self.weight)+',color = '+self.color+']'
a = Apple(89,'绿色')
print(a)

在这里插入图片描述

8.1.2 析构方法:del

与__init__相对应的,__del__方法是析构方法,用于销毁对象,在任何Python对象被系统回收的时候,都会自动调用这个函数。

# __del__
# __del__
class Item:
    def __init__(self,name,price):
        self.name = name
        self.price = price
    def __del__(self):
        print('重写析构')
im = Item('pwc','23')
x= im
del im
print('-----------------')

在这里插入图片描述
从上面的代码中可以看到,由于x一直在被程序调用并没有被删除掉,导致无法释放对象,只能等到程序结束的时候才能够将其释放掉

8.1.3 __dir__方法

对象的__dir__()方法用于列出该对象内部的所有属性(包括方法名),该方法将返回包含所有属性名的序列

8.1.4 __dict__属性

用于查看对象内部存储的所有属性名和属性值组成的字典,通常程序直接使用该属性即可

8.2 与反射相关的属性和方法

8.3 与序列先关的特殊方法

8.3.1 常用序列方法

序列最重要的特征是可以包含多个元素,因此和序列有关的特殊方法有如下几个
len(self):该方法的返回值决定序列中元素的个数
getitem(self,key):获取指定索引对相应的元素,
contains(self,item):判断序列是否包含指定元素
setitem(self,key,value):该方法设置指定索引对顶的元素
delitem(self,key):该方法删除指定索引对应的元素

8.3.2 迭代器

#定义一个代表斐波那契数列的迭代器
class Fibs:
    def __init__(self,len):
        self.first = 0
        self.sec = 1
        self.__len = len
    def __next__(self):
        if self.__len == 0:
            raise StopIteration
        self.first,self.sec = self.sec,self.first+self.sec
        self.__len -= 1
        return self.first
    def __iter__(self):
        return self
fibs = Fibs(10)
print(fibs.__next__())
print(next(fibs))
for el in fibs:
    print(el,end = ' ')

8.4 生成器

8.4.1 生成器介绍

生成器与迭代器的区别在于,迭代器通常是先定义一个迭代器类,然后通过创建实例来创建迭代器,而生成器则是先定义一个包含yield语句的函数,然后通过调用该函数来创建生成器,生成器是一种非常优秀的语法,会然程序变得更加优雅

#使用生成器来定义一个差值递增的数列,
def test(val,step):
    print('--------------start')
    cur = 0
    for i in range(val):
        cur += i *step
        yield cur
t = test(10,2)
print('===================')
print(t.__next__())
print(t.__next__())

8.4.2 生成器方法

在生成器运行起来以后,开发者还可以为生成器提供值,通过在这种方式让生成器与外部程序动态的交换数据。为了实现交换数据,需要使用send方法来实现

  • 外部程序通过send()发送数据
  • 生成器使用yeild语句来接收数据

8.5 运算符重载的特殊方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值