函数(字符串函数)重写 overwrite

函数(字符串函数)重写 overwrite

  • 什么是而函数重写
    在自定义的类内添加相应的方法,让自定义的类创建的实例能够使用內建函数进行操作

  • 对象转字符串函数

    • repr(x) 返回一个能表示python对象的表达式字符串,通常
      eval(repr(obj)) == obj
      得到的是对象前后加上表示字符串的引号
    • str(x) 通过给定的对象返回一个字符串(这个字符串通常供人阅读)
      示例:
s = "I'mTeacher"
print(str(s))  # I'mTeacher  这是人能阅读的字符串
print(repr(s))  # "I'mTeacher" 这是python能够识别的表达式(字符串对象)

str(obj)函数调用方法说明:

1. str(obj) 函数先查找obj.__str__()方法,调用此方法并返回结果
2. 如果obj.__str__()方法不存在, 则调用__repr__ 方法并返回结果
3. 如果 obj.__repr__ 示例方法显示 <main,×××× object at 0xXXXXXXXX>格式的字符串
下面为对象转字符串函数的重写:

class Mynumber():
    def __init__(self, val):
        self.data = val  # 每个对象内部都创建一个实例变量来绑定数据


n1 = Mynumber(100)
# str 调用的是父类 object中的 __str__() 方法
print('str(n1) =', str(n1))  # 如何希望打印出的是自定义数字 100
print('repr(n1) =', repr(n1))
# 结果为
# str(n1) = <__main__.Mynumber object at 0x7fad74af1a20>
# repr(n1) = <__main__.Mynumber object at 0x7fad74af1a20>
print('--------------------下面重写str---------------------------')


# 此示例示意对象转字符串函数的重写方法重写__str__()方法
class Mynumber():
    def __init__(self, val):
        self.data = val  # 每个对象内部都创建一个实例变量来绑定数据

    def __str__(self):
        return "自定义数字: %d" % self.data


n1 = Mynumber(100)
# 重写后调用自己的 n1.__str__() 方法, 看结果 ,覆盖了object 中的方法
print('str(n1) =', str(n1))  # 希望打印出的是自定义数字 100
print(n1.__str__())
# str(n1) = 自定义数字: 100
print(n1)  # 在 print 内部会将n2用str(x)转为字符串再写到sys.stdout中
# 自定义数字: 100
print('repr(n1) =', repr(n1))
# 调用的是 object 里面的 __repr__() 方法
# repr(n1) = <__main__.Mynumber object at 0x7fde06b2b978>

print('--------------------下面重写repr--------------------------')


# 此示例示意对象转字符串函数的重写方法重写__repr__()方法
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)
# str 调用的是父类 object中的 __str__() 方法
# 可以重写,调用自己的 n1.__str__() 方法, 看结果 ,覆盖了object 中的方法

print('repr(n1) =', repr(n1))
# repr(n1) = MyNumber(100)

你可能感兴趣的:(python基础)