函数重写

基本概念

定义:

    在自定义的类内部添加相应的方法,让自定义的类创建的实例能够使用内建函数进行操作

对象转字符串函数:

    repr(x) 返回一个能表示python 对象的表达式字符串,通常eval(repr(obj)) == obj

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

    实例:

        s = "I'mStudent"
        print(str(s))   # I'mTeacher
        print(repr(s))  # 'I\'mTeacher'

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

    repr() 函数的重写方法:
        del __repr__(self):
            return 字符串

    str() 函数的重写方法:
        del __str__(self):
            return 字符串

    str(obj) 函数调用方法说明:
        1.str(obj) 函数先查找obj.__str__(方法),调用此方法并返回结果
        2.如果obj.__str__()方法不存在,则调用obj.__repr__()方法并返回结果
        3.如果obj.__repr__方法不存在,则调用object类的__repr__实例方法显示
            <__main__.XXXX object at 0xXXXXXXXX>格式的字符串

    示例:

	class MyNumber:
	    def __init__(self, val):
	        self.data = val  # 在每个对象内部都创建一个实例变量来绑定数据
	
	    def __str__(self):
	        return "自定义数字%d" % self.data
	
	    def __repr__(self):
	        '''此方法返回的字符串一定是能表示self对象的表达式字符串'''
	        return "MyNumber(%d)" % self.data
	
	
	n1 = MyNumber(100)
	print(n1)  # 在print()内部会将n1用str(x)转为字符串再写到sys.stdo
	print('str(n1) =', str(n1))  # 自定义的数字:100
	print('repr(n1) =', repr(n1))  # MyNumber(100)

内建函数重写:

            方法名                     函数名
    def __abs__(self):              abs(obj)   函数调用
    def __len__(self):              len(obj)   函数调用
    def __reversed__(self):         reversed(obj)   函数调用
    def __round__(self):            round(obj)   函数调用

    实例:
    
	class MyList:
	    def __init__(self, iterable=()):
	        self.data = [x for x in iterable]
	
	    def __repr__(self):
	        return "MyList(%s)" % self.data
	
	    def __len__(self):
	        return len(self.data)
	
	    def __abs__(self):
	        # L = []
	        # for i in self.data:
	        #     L.append(abs(i))
	        # return "MyList(%s)" % L
	        return MyList([abs(x) for x in self.data])
	
	
	myl = MyList([1, -2, 3, -4])
	print(len(myl))
	print(abs(myl))

数值转换函数重写:

    def __complex__(self):          complex(obj) 函数调用
    def __int__(self):              int(obj)
    def __float__(self):            float(obj)
    def __bool__(self):             bool(obj)

    实例:
	
	 class MyNumber:
	    def __init__(self, val):
	        self.data = val
	
	    def __repr__(self):
	        return "MyNumber(%d)" % self.data
	
	    def __int__(self):
	        return int(self.data)
	
	    def __float__(self):
	        return float(self.data)
	
	
	n1 = MyNumber(100)
	n = float(n1)
	print(n)

布尔测试函数的重写:

    格式:

        def __bool__(self):
            ...

    作用:

        用于bool(obj)函数取值
        用于if语句真值表达式中
        用于while语句的真值表达式中

    说明:

        当自定义类内有__bool__(self)方法时,此方法的返回值为bool(x)的返回值

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

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

对象的属性管理函数:

getatrr(obj, name[, default])

从一个对象用字符串name得到对象的属性,getattr(x, 'y')等同于x, y;当属性不存在时,
如果给定default参数则返回default,如果没有给出default则触发一个AttributeError错误

hasattr(obj, name)

用给定的name字符串返回obj是否有此属性,此种做法可以避免在getattr(obj, name)时引发错误

setattr(obj, name, value)

给对象obj名为name的属性设置相应的值value,setattr(x, 'y', v)等同于 x.y = v

delattr(obj, name)

删除对象obj中的name属性del(x, 'y') 等同于 del x.y
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值