鱼C论坛

 找回密码
 立即注册
查看: 1833|回复: 20

关于__str__()方法的问题

[复制链接]
发表于 2018-4-21 22:04:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 清风揽月shine 于 2018-4-21 22:08 编辑

求各位大佬 帮忙解答一下!
2345截图20180421220600.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-4-21 22:04:57 | 显示全部楼层
@小甲鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-21 23:47:25 | 显示全部楼层

回帖奖励 +2 鱼币

1. return print(..),这种写法是绝对、绝对、绝对不推荐的,print返回None,你要return什么(估计是笔误?)
2. 我按照我的理解把楼主的代码重写了,如下
>>> class CountableList(object):
        def __init__(self, *args):
                self.elements = [x for x in args]
                self.counter = {}.fromkeys(self.elements, '对象未访问')
        def __repr__(self):
                return str(self.counter)
        def __len__(self):
                return len(self.counter)
        def __getitem__(self, key):
                if isinstance(self.counter[key], str):
                        self.counter[key] = 1
                else:
                        self.counter[key] += 1
                print('该对象被访问了'+str(self.counter[key])+'次')
                return key
        def add(self, new_item):
                self.counter[new_item] = '对象未访问'

               
>>> my_cnt = CountableList(1,2,3)
>>> my_cnt
{1: '对象未访问', 2: '对象未访问', 3: '对象未访问'}
>>> a = my_cnt[2]
该对象被访问了1次
>>> b = my_cnt[2]
该对象被访问了2次
>>> c = my_cnt[2]
该对象被访问了3次
>>> my_cnt.add(4)
>>> len(my_cnt)
4
>>> my_cnt
{1: '对象未访问', 2: 3, 3: '对象未访问', 4: '对象未访问'}
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-4-22 00:32:53 | 显示全部楼层
class Node(object):

        def __init__(self, data=None):
                self.data = data
                self.count = 0                # 为每个结点设置计数count

        def __repr__(self):
                return repr({self.data:self.count})

def node(data):
        return Node(data)                # 工厂函数,创建Node对象

class CountableList(object):

        def __init__(self, *args):
                self.countableList = [node(x) for x in args]                # 用一个list维护整个countableList结构

        def __getitem__(self, index):
                self.countableList[index].count += 1
                return self.countableList[index]

        def __len__(self):
                return len(self.countableList)

        def __repr__(self):
                return repr([node for node in self.countableList])


lyst  = CountableList(1,2,3)
a = lyst[1]
b = lyst[1]
print(lyst)

========================

结果输出:[{1: 0}, {2: 2}, {3: 0}]
[Finished in 0.1s]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-22 00:38:06 | 显示全部楼层

回帖奖励 +2 鱼币

将Node对象从List对象中分离出来(解耦),有利于整体后期的维护和调试。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-22 15:37:43 | 显示全部楼层
ABC23 发表于 2018-4-22 00:38
将Node对象从List对象中分离出来(解耦),有利于整体后期的维护和调试。

谢谢你回复这么多啊  但是我的意思你可能没有搞明白  这个方法
def __str__(self):
     return self.prompt  
__repr__=__str__
这个方法 在上面两个例子中使用  一个可以用一个不可以用  搞不懂为什么   至于你说的return print(。。。)为啥不能用? 直接return ‘xxxx’字符串不就可以了 print都不用打印
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-22 15:56:03 | 显示全部楼层
清风揽月shine 发表于 2018-4-22 15:37
谢谢你回复这么多啊  但是我的意思你可能没有搞明白  这个方法
def __str__(self):
     return self.p ...

return 字符串当然是可以的。你写的源代码return print这就『暴露了你作为初学者的本性 @_@』。
return表示函数(方法)返回,即把ESP指针压入栈空间,之后call它的时候再pop出来。
return的标准形式是return 返回值,如果不写默认为None。
print函数的返回值为None,所以return None——这里是没有意义的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-22 16:05:05 | 显示全部楼层
ABC23 发表于 2018-4-22 15:56
return 字符串当然是可以的。你写的源代码return print这就『暴露了你作为初学者的本性 @_@』。
return ...

我return 哪里返回print的返回值额!我是将print打印的内容作为结果返回 233.。。。如果不简写 用个参数你就不会这么认为了 关键我问的问题这个不是重点  谢谢你热心的指出这个问题  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-22 20:42:14 | 显示全部楼层

回帖奖励 +2 鱼币

学习学习

评分

参与人数 1鱼币 -10 收起 理由
新手·ing -10 请不要无意义灌水!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-14 09:54:55 | 显示全部楼层
厉害厉害

评分

参与人数 1鱼币 -10 收起 理由
新手·ing -10 请不要无意义灌水!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-14 10:21:36 | 显示全部楼层

回帖奖励 +2 鱼币

学习学习

评分

参与人数 1鱼币 -10 收起 理由
新手·ing -10 请不要无意义灌水!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-15 22:58:41 | 显示全部楼层
本帖最后由 multitate 于 2018-7-15 23:00 编辑

解答的很详细,看懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-16 20:12:01 | 显示全部楼层

回帖奖励 +2 鱼币

厉害厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2018-7-26 13:13:04 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2018-7-26 13:13:40 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-9-30 15:20:07 | 显示全部楼层

回帖奖励 +2 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-30 15:21:43 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-30 15:23:18 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-1 11:45:41 | 显示全部楼层
厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2018-10-8 11:11:08 | 显示全部楼层

回帖奖励 +2 鱼币

提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 23:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表