python方法笔记

一,__str__和__repr__   方法

大概就是 将类的实体变成一个str 字符串


>>> class Person(object):
	def __init__(self, name, gender):
		self.name = name
		self.gender =gender
	def __str__(self):
		return 'Person:%s, %s' % (self.name,self.gender)

	
>>> p = Person('Bob','male')
>>> p
<__main__.Person object at 0x0000020B98BD0F60>  #当我们调用p时,返回的是类的对象,它所在的地址,只有调用print(p)时,才输出打印字符串

>>> print(p)
Person:Bob, male


class Person(object):
	def __init__(self, name, gender):
		self.name = name
		self.gender =gender
	def __str__(self):
		return 'Person:%s, %s' % (self.name,self.gender)
	__repr__ = __str__   #此处将__str__的返回值给__repr__,经__repr__方法处理后,可以使得一个类变成字符串

	
>>> p = Person('Bob','male')
>>> p
Person:Bob, male

>>> print(p)
Person:Bob, male

    

实际上内部的原理我也不懂,作为一个初学者,先学会用,再去了解其中的原理,期待下次更新。。。

 

 

本文参考自:

https://stackoverflow.com/questions/18393701/the-difference-between-str-and-repr?noredirect=1&lq=1

在stackoverflow上,有个兄弟问了这个问题:

首先定义一个类:

 

class Item():
    def __init__(self,name):
        self._name=name

  def __str__(self):
     return "Item's name is :"+self._name
print((Item("Car"),))

 

返回的是:

C:\Python35\python.exe C:/fitme/work/nltk/1.py
(<__main__.Item object at 0x000001DC3F9BB390>,)

Process finished with exit code 0

 

更改成这样的代码后:

 

class Item():
    def __init__(self,name):
        self._name=name
    # def __str__(self):
    #     return "Item's name is :"+self._name

    def __repr__(self):
        return "Item's name is :" + self._name


print((Item("Car"),))

 

返回结果是:

C:\Python35\python.exe C:/fitme/work/nltk/1.py
(Item's name is :Car,)

Process finished with exit code 0

有人解答如下:

1.对于一个object来说,__str__和__repr__都是返回对object的描述,只是,前一个的描述简短而友好,后一个的描述,更细节复杂一些。

2.对于有些数据类型,__repr__返回的是一个string,比如:str('hello') 返回的是'hello',而repr('hello')返回的是“‘hello’”

3.现在是重点了:

Some data types, like file objects, can't be converted to strings this way. The __repr__ methods of such objects usually return a string in angle brackets that includes the object's data type and memory address. User-defined classes also do this if you don't specifically define the __repr__ method.

When you compute a value in the REPL, Python calls __repr__ to convert it into a string. When you use print, however, Python calls __str__.

When you call print((Item("Car"),)), you're calling the __str__ method of the tuple class, which is the same as its __repr__ method. That method works by calling the __repr__ method of each item in the tuple, joining them together with commas (plus a trailing one for a one-item tuple), and surrounding the whole thing with parentheses. I'm not sure why the __str__ method of tuple doesn't call __str__ on its contents, but it doesn't.

 

print(('hello').__str__())
print(('hello').__repr__())

有一个更简单的例子如下:

from datetime import datetime as dt
print(dt.today().__str__())
print(dt.today().__repr__())

1

2

3

4

5

C:\Python35\python.exe C:/fitme/work/nltk/1.py

2017-06-16 11:09:40.211841

datetime.datetime(2017, 6, 16, 11, 9, 40, 211841)

 

Process finished with exit code 0

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值