python函数重写怎么理解

爱喝马黛茶的安东尼
发布: 2019-06-25 15:43:33
原创
4390人浏览过

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

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

python函数重写怎么理解

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

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

立即学习Python免费学习笔记(深入)”;

def __repr__(self):
登录后复制

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

def __str__(self):
登录后复制

说明:

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

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

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

示例:

# 此示例示意通过重写 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)  函数

示例:

# 此示例示意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) 函数     (见下面布尔测试函数重载)

示例:

# 此示例示意数据转换构造函数的重写方法
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

示例:

# 此示例示意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函数重写怎么理解的详细内容,更多请关注php中文网其它相关文章!

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号