python函数重写怎么理解


本文摘自php中文网,作者爱喝马黛茶的安东尼,侵删。

在自定义类内添加相应的方法,让自定义类创建的实例能像内建对象一样进行内建函数操作,这就是函数重写。

对象转字符串函数:repr(obj) ,返回一个能代表此对象的表达式字符串,通常eval(repr(obj)) == obj (这个字符串通常是给python解释执行器运行用的),str(obj) 通过给定的对象返回一个字符串(这个字符串通常是给人阅读的)。

对象转字符串函数的重写方法:

repr(obj) 函数的重写方法:

1

def __repr__(self):

str(obj) 函数的重写方法:

1

def __str__(self):

说明:

1. str(obj) 函数先查找, obj.__str__()方法,调用此方法并返回结果

2. 如果没有obj.__str__()方法时,则返回obj.__repr__()方法的结果并返回

3. 如果obj.__repr__方法不存在,则调用object类的__repr__实例方法显示<__main__.XXXX object at 0xAABBCCDD>格式的字符串

示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

# 此示例示意通过重写 repr 和 str方法改变转为字符串的规则

class MyNumber:

    def __init__(self, value):

        '构造函数,初始化MyNumber对象'

        self.data = value

  

    def __str__(self):

        '''转换为普通人识别的字符串'''

        # print("__str__方法被调用!")

        return "自定义数字类型对象: %d" % self.data

  

    def __repr__(self):

        '''转换为eval能够识别的字符串'''

        return 'MyNumber(%d)' % self.data

  

  

n1 = MyNumber(100)

n2 = MyNumber(200)

print('repr(n1) ====>', repr(n1))

print('str(n2)  ====>', str(n2))

相关推荐:《Python视频教程》

其它内建函数的重写方法:

__abs__ abs(obj) 函数

__len__ len(obj) 函数(必须返回整数)

__reversed__ reversed(obj) 函数(必须返回可迭代对象

__round__ round(obj) 函数

示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

# 此示例示意abs 函数的重写

class MyInteger:

  

    def __init__(self, v):

        self.data = v

  

    def __repr__(self):

        return 'MyInteger(%d)' % self.data

  

    def __abs__(self):

        v = abs(self.data)

        return MyInteger(v)  # 用v创建另一个MyInteger对象

  

    def __len__(self):

        return 10000

  

I1 = MyInteger(-10)

print('I1 =', I1)

  

I2 = abs(I1)

print("I2 =", I2)

  

print('len(I2)=', len(I2))  # 10000

数值转换函数的重写:

__complex__ complex(obj) 函数

__int__ int(obj) 函数

__float__ float(obj) 函数

__bool__ bool(obj) 函数 (见下面布尔测试函数重载)

示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

# 此示例示意数据转换构造函数的重写方法

class MyNumber:

  

    def __init__(self, value):

        self.data = value

  

    def __repr__(self):

        return 'MyNumber(%d)' % self.data

  

    def __int__(self):

        'int函数的重载'

        return self.data

  

n1 = MyNumber(100)

x = int(n1)

print(n1)

  

print(bool(n1))  # True

n2 = MyNumber(0)

print(bool(n2))  # True

布尔测试函数重写:

格式:

__bool__

作用:

用于bool(obj) 函数取值

用于if语句的真值表达式中

用于while 语句的真值表达式中

说明:

1. 当自定义的类内有 __bool__(self) 方法时,以此方法的返回值作为bool(obj) 的返回值

2. 当不存在__bool__(self) 方法时,bool(x) 返回__len__(self) 方法的返回值是否为零来测试布尔值

3. 当不存在__len__(self) 方法时,则直接返回True

示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

# 此示例示意bool(x) 函数的重写

class MyList:

    '自定义类型的列表,用来保存数据,内部用一个列表来存储数据'

  

    def __init__(self, iterable=()):

        self.data = [x for x in iterable]

  

    def __repr__(self):

        return 'MyList(%s)' % self.data

  

    def __len__(self):

        '''返回长度'''

        print("__len__方法被调用")

        return len(self.data)

  

    def __bool__(self):

        print("__bool__方法调用")

        for x in self.data:

            if not x:

                return False

        return True

        # return False  # <<=== 所有对象都为False

  

myl = MyList([0, -1, 2, -3])

# myl = MyList()

print(myl)

print(bool(myl))

if myl:

    print("myl为真值")

else:

    print('myl为假值')

以上就是python函数重写怎么理解的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python怎么用idle

一分钟了解Python中“*”的作用

Python程序文件的扩展名称是什么

Python如何实现简单的用户交互程序(示例)

Python的pandas中常用函数的总结

Python的爬虫框架有哪些

Python中转义字符是什么意思

Python如何删除除字母和数字之外的所有字符?(代码示例)

Python list元素为tuple时的排序方法

Python数据类型的区别

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...