从0.1开始学Python——[24]

从0.1开始学Python——[24]

程序运行过程中,会产生垃圾,将会影响运行性能,因此需要进行及时的垃圾清理。

垃圾

垃圾指的是程序运行过程产生的没用的东西,没用,换言之就是没用被引用的对象。写出来,但是不用,自然就是单纯占用资源而不发挥作用的,所以被定为垃圾。垃圾多了会影响性能。

class Shiyan():
    leishuxing = 6

    def __init__(self):
        self.shilishuxing = '⑨'

    def shilifangfa(self):
        print('实例方法')

    @classmethod
    def leifangfa(cls):
        print('类方法',cls)

    @staticmethod
    def jingtaifangfa():
        print('静态方法')
        
    def __del__(self):
        print('对象已回收')

s = Shiyan()
print(s.shilishuxing)
s = None

input('输入任意内容后程序结束')
⑨
对象已回收
输入任意内容后程序结束

比如这个过程,类Shiyan()被创建出来,但是没有任何的对象引用他(因为引用他的对象s已经被赋值为None了),所以他就变成了垃圾。从结果看也能知道,(双下划线)del(双下划线)(self)方法的作用就是在这个类没有被引用的时候删除他。另外,之所以在最后加一个input(‘输入任意内容后程序结束’)是因为,直接结束程序的话,无论这个类有没有被引用,都会变成垃圾,因为程序结束了。

s = Shiyan()
print(s.shilishuxing)
# s = None

input('输入任意内容后程序结束')
⑨
输入任意内容后程序结束

可以看出,s = None被取消后,类就不是垃圾了,没有被删除。

其他特殊方法

之前讲过,特殊方法的格式基本上就是 (双下划线)方法名(双下划线)(形参)。有一些特殊方法比较常见。
比如,(双下划线)str(双下划线)(形参)方法,作用是返回打印对象的返回值,就是说设置之后打印对象会打印你设置的内容,不设置的话就会默认打印对象id等等内容,简而言之就是把对象转换为字符串

class Guobaotegong():
    def __init__(self,name,breed):
        self._name = name
        self._breed = breed

    def __str__(self):
        return 'Guobaotegong成员[ %s, 品种是 %s]'%(self._name,self._breed)


clx = Guobaotegong('橙留香','橙子')
blcx = Guobaotegong('菠萝吹雪','菠萝')
lxg = Guobaotegong('陆小果','我不到啊')

print(clx)
print(blcx)
print(lxg)
Guobaotegong成员[ 橙留香, 品种是 橙子]
Guobaotegong成员[ 菠萝吹雪, 品种是 菠萝]
Guobaotegong成员[ 陆小果, 品种是 我不到啊]

(双下划线)repr(双下划线)(形参)方法,是在对某个对象repr()函数的时候有效,效果在编译器中和str方法一样,但是在交互界面不一样,会和str方法有有无引号的区别。而且str方法使用只需要用print函数就行,但是repr方法需要同时调用repr函数。

上略
def __repr__(self):
        return 'Guobaotegong成员[ %s, 品种是 %s]'%(self._name,self._breed)
print(repr(clx))
Guobaotegong成员[ 橙留香, 品种是 橙子]

比大小的方法有很多,用于解决不能直接用比较运算符比较大小的问题。比如object.(双下划线)lt(双下划线)(self, other)是小于,object.(双下划线)le(双下划线)(self, other)是小于等于,object.(双下划线)eq(双下划线)(self, other)是等于,object.(双下划线)ne(双下划线)(self, other)是不等于,object.(双下划线)gt(双下划线)(self, other)是大于,object.(双下划线)ge(双下划线)( self, other)是大于等于。

上略
def __lt__(self, other):
        return self._name > other._name

print(clx > lxg)
print(lxg > clx)
True
False

(双下划线)bool(双下划线)(self)方法是用来返回结果布尔值的。

上略
def __bool__(self):
        return True

print(bool(blcx))
True

其他还有很多,了解用处后使用就行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值