随便写写python的特殊方法

支持用于生成对象其他表示形式的内置函数(repr(),bytes())

repr()和str()都是返回对象的字符串形式。

class test():
    typecode = 'd'
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __repr__(self):
        name = 'repr is change'
        return name

我们可以在一个定义类里实现repr方法

v = test(3,4)
repr(v)
Out[12]: 'repr is change'

还有__bool__,__abs__,__eq__,__str__进行重载,记得要注意在文档中说明

下面看看classmethod,staticmethod的方法

class test2():
    @classmethod
    def a(*args):
        return args
    @staticmethod
    def b(*args):
        return args
test2.a()
Out[15]: (__main__.test2,)
test2.b()
Out[16]: ()

我们可以注意到classmethod改变了调用方法的形式,类方法传入的第一个参数是类本身,可以使用这个类重新构建一个实例

staticmethod呢,就是一个函数,只不过恰巧出现在了类里面而已,第一个参数就不是实例本身了

类的私有属性

class test3():

    def _a(*args):
        print(args)

在方法前面加一个_便是这个方法受到保护,但实际上你还是可以访问的,只要这样test._a(),这只是告诉后来人这个方法私有,不是你真的不可以访问了。

class test3():

    def __a(*args):
        print(args)

加两个下划线,python会使用名称改写,从而将这个方法保护起来,例如

dir(test3)

Out[26]:

['__class__',

...

'_test3__a']

方法名称会加上_类名。

此外,__slots__来存储你所想写的实例属性,这样就不需要python的__dict__方法消耗大量内存存储实例属性

class test4():

    __slots__ = ('a', 'b')   
dir(test4)
Out[28]: 
['__class__',
 '__delattr__',
...
 'a',
 'b']

但是注意,如果使用了__slots__,这样的话,每个子类都要定义__slots__,否则解释器就会忽略继承的__slots__

实例就只能调用__slots__列出的属性

原文发布于微信公众号 - 鸿的学习笔记(shujuxuexizhilu)

原文发表时间:2017-08-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我的博客

JS闭包

在理解闭包以前.最好能先理解一下作用域链的含义,简单来说,作用域链就是函数在定义的时候创建的,用于寻找使用到的变量的值的一 个索引,而他内部的规则是,把函数自...

33750
来自专栏用户画像

String s=new String("abc")创建了几个对象?

String str=new String("abc");   紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢?

13010
来自专栏计算机视觉

Python 函数使用记录,join函数和os.path.join用法

1.join()函数 语法:‘sep’.join(seq) 参数说明: sep:分隔符。可以为空 seq:要连接的元素序列、字符串、元组、字典等 上面的语法即:...

29470
来自专栏marsggbo

strspn 和strcspn

1、strcspn 头文件:#inclued<string.h> 定义函数:size_t strcspn(const char *s, const char...

23260
来自专栏mySoul

C++入坑

给变量设置一个集合,该变量的值只能从该集合中取为枚举类型。且,转为int类型的初始值为0~6,可以设置其int值

13130
来自专栏Astropeak

Python 描述符是什么?以及如何实现

17930
来自专栏程序员同行者

Python中的join()函数的用法

Python中有join()和os.path.join()两个函数,具体作用如下:     join():    连接字符串数组。将字符串、元组、列表中的元素以...

7710
来自专栏和蔼的张星的图像处理专栏

50. 数组剔除元素后的乘积两个遍历

给定一个整数数组A。 定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], 计算B的时候请不要使用除法。...

12740
来自专栏Laoqi's Linux运维专列

匿名函数

10350
来自专栏Bug生活2048

Python自学之路-内置函数说明及实例(三)

filter函数用于过滤序列。过滤的方式则是采用传入的函数,去循环序列的元素调用,如果函数计算的结果为True则保留元素,否则将舍弃该元素。

12930

扫码关注云+社区

领取腾讯云代金券