Python函数的重写

函数重写

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

对象转字符串函数:

repr(obj)     返回一个能代表此对象的表达式字符串,通常
         eval(repr(obj)) == obj  (这个字符串通常是给python解释执行器运行用的)

str(obj)  通过给定的对象返回一个字符串(这个字符串通常是给人阅读的)

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

repr(obj) 函数的重写方法:
      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 0xAABBCCDD>格式的字符串

示例:

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

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

  __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. 当自定

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值