python函数重写怎么理解

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

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

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

python函数重写怎么理解

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

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):
        &#39;构造函数,初始化MyNumber对象&#39;
        self.data = value
 
    def __str__(self):
        &#39;&#39;&#39;转换为普通人识别的字符串&#39;&#39;&#39;
        # print("__str__方法被调用!")
        return "自定义数字类型对象: %d" % self.data
 
    def __repr__(self):
        &#39;&#39;&#39;转换为eval能够识别的字符串&#39;&#39;&#39;
        return &#39;MyNumber(%d)&#39; % self.data
 
 
n1 = MyNumber(100)
n2 = MyNumber(200)
print(&#39;repr(n1) ====>&#39;, repr(n1))
print(&#39;str(n2)  ====>&#39;, 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 &#39;MyInteger(%d)&#39; % self.data
 
    def __abs__(self):
        v = abs(self.data)
        return MyInteger(v)  # 用v创建另一个MyInteger对象
 
    def __len__(self):
        return 10000
 
I1 = MyInteger(-10)
print(&#39;I1 =&#39;, I1)
 
I2 = abs(I1)
print("I2 =", I2)
 
print(&#39;len(I2)=&#39;, 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 &#39;MyNumber(%d)&#39; % self.data
 
    def __int__(self):
        &#39;int函数的重载&#39;
        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:
    &#39;自定义类型的列表,用来保存数据,内部用一个列表来存储数据&#39;
 
    def __init__(self, iterable=()):
        self.data = [x for x in iterable]
 
    def __repr__(self):
        return &#39;MyList(%s)&#39; % self.data
 
    def __len__(self):
        &#39;&#39;&#39;返回长度&#39;&#39;&#39;
        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(&#39;myl为假值&#39;)
登录后复制

以上是python函数重写怎么理解的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板