python方法重写说法正确的是_python-面向对象-20-重写__str__方法/__repr__方法

1.基本介绍

object类有一个__str__()方法,用于返回一个"对象的描述",对应于内置函数str(),经常用于print()方法,帮助我们查看对象的信息。

因为__str__()默认在object类中定义,所以子类可以重写这个方法。

不同语言中对应的不同的方法名:

Python语言: __str__()方法

JAVA语言:toString()方法

PHP语言:__toString()方法

2.方法定义

__str__()默认定义在类object当中。

def __str__(self, *args, **kwargs): # real signature unknown

""" Return str(self). """

pass

3.简单示例

示例代码:

class Student(object):

pass

class Person(object):

def __init__(self, name, age):

self.name = name

self.age = age

def __str__(self):

return "名字:{0},年龄:{1}".format(self.name, self.age)

s1 = Student()

print(s1)

print("--" * 20)

p1 = Person("聂发俊", 100)

print(p1)

运行结果:

----------------------------------------

名字:聂发俊,年龄:100

程序说明:

类Student直接继承类object,所以__str__()也直接沿用,所以打印内容格式如下:的格式

类Person继承类object,但是定义了__str__(),属于子类重写父类方法,采用子类的__str__()方法,所以执行打印的时候,输出:名字:聂发俊,年龄:100.

4.__str__和__repr__区别

str()函数和__str__在日常的开发看的很多,但是可能很少人会注意__repr__,这两个很接近,但是有一些细微的差别。

相同点: 两个都是打印输出功能的函数

不同点: __str__是面向用户显示的,在IDE和命令行都出现,很常见。__repr__是面向程序显示,只出现在命令行,很少见。

示例代码:

>>> class Person:

... def __init__(self, name, age):

... self.name = name

... self.age = age

... def __str__(self):

... return "__str__:{0},{1}".format(self.name, self.age)

... def __repr__(self):

... return "__repr__:{0},{1}".format(self.name, self.age)

...

>>> p1 = Person("niefajun", 100)

>>> p1

__repr__:niefajun,100

>>> print(p1)

__str__:niefajun,100

程序说明:

在命令行环境中,定义类Person,包含两个实例属性name和age,另外重写了__str__(self)和__repr__(self)两个方法,并且实例化对象p1

当单独执行>>> p1的时候,由于在命令行环境,这个时候会执行__repr__(self),完成打印功能,所以显示:__repr__:niefajun,100,而当使用print(p1)相当于是给用户看的,会调用__str__(self)方法,所以输出:__str__:niefajun,100。

注意:在python文件中使用的都是__str__

备注:

更多精彩博客,请访问:聂发俊的技术博客

对应视频教程,请访问:python400

完整markdown笔记,请访问: python400_learn_github

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值