鱼C论坛

 找回密码
 立即注册
查看: 1144|回复: 10

[已解决]请问如何实现print输出自动显示谁调用方法就显示谁

[复制链接]
发表于 2019-6-7 20:10:07 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 阳顺 于 2019-6-7 20:11 编辑

请问如何实现print输出自动显示谁调用方法就显示谁
就是最后两行,如何自动实现显示fish的位置是,和goldfish的位置是
而不是显示
<__main__.Fish object at 0x000002678A2480B8>的位置是: 1 6
<__main__.Fish object at 0x000002678A2B2F60>的位置是: 0 9  

print('%s的位置是:'%self,self.x,self.y)这里的代码怎么改呢
                                 
  1. '''
  2. class DerivedClassName(BaseClassName):
  3.     .....
  4.    
  5. '''
  6. import random as r

  7. class Fish:                     #父类
  8.     def __init__(self):                #初始化
  9.         self.x = r.randint(0,10)       #x坐标
  10.         self.y = r.randint(0,10)       #y坐标

  11.     def move(self):
  12.         self.x -= 1                    #每次减1
  13.         print('%s的位置是:'%self,self.x,self.y)


  14. fish = Fish()      #父类的实例对象
  15. fish.move()

  16. goldfish = Fish()
  17. goldfish.move()



  18. '''
  19. <__main__.Fish object at 0x000002678A2480B8>的位置是: 1 6
  20. <__main__.Fish object at 0x000002678A2B2F60>的位置是: 0 9
复制代码
最佳答案
2019-6-7 20:26:56
阳顺 发表于 2019-6-7 20:24
没明白,能详细点吗
  1. '''
  2. class DerivedClassName(BaseClassName):
  3.     .....
  4.    
  5. '''
  6. import random as r

  7. class Fish:                     #父类
  8.     def __init__(self,name):                #初始化
  9.         self.x = r.randint(0,10)       #x坐标
  10.         self.y = r.randint(0,10)       #y坐标
  11.         self.name = name            #起名
  12.     def move(self):
  13.         self.x -= 1                    #每次减1
  14.         print('%s的位置是:'%self.name,self.x,self.y)


  15. fish = Fish('fish')      #父类的实例对象
  16. fish.move()

  17. goldfish = Fish('goldfish')
  18. goldfish.move()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-6-7 20:21:28 | 显示全部楼层
init传入名字字符串,然后就可以调用了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-7 20:24:23 | 显示全部楼层
塔利班 发表于 2019-6-7 20:21
init传入名字字符串,然后就可以调用了

没明白,能详细点吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-7 20:26:56 | 显示全部楼层    本楼为最佳答案   
阳顺 发表于 2019-6-7 20:24
没明白,能详细点吗
  1. '''
  2. class DerivedClassName(BaseClassName):
  3.     .....
  4.    
  5. '''
  6. import random as r

  7. class Fish:                     #父类
  8.     def __init__(self,name):                #初始化
  9.         self.x = r.randint(0,10)       #x坐标
  10.         self.y = r.randint(0,10)       #y坐标
  11.         self.name = name            #起名
  12.     def move(self):
  13.         self.x -= 1                    #每次减1
  14.         print('%s的位置是:'%self.name,self.x,self.y)


  15. fish = Fish('fish')      #父类的实例对象
  16. fish.move()

  17. goldfish = Fish('goldfish')
  18. goldfish.move()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-7 20:32:44 | 显示全部楼层
self给出的是内存的地址,换个思路,用globals的字典去找。
  1.     def move(self):
  2.         self.x -= 1                    #每次减1
  3.         for i in globals():
  4.             if globals()[i] == self:
  5.                 break
  6.         print('%s的位置是:'%i,self.x,self.y)
复制代码
  1. fish的位置是: 4 2
  2. goldfish的位置是: 5 6
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-6-7 22:17:17 | 显示全部楼层
冬雪雪冬 发表于 2019-6-7 20:32
self给出的是内存的地址,换个思路,用globals的字典去找。

你这个for in块实现的什么
globals()   python有这个函数方法吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-7 22:20:31 | 显示全部楼层
本帖最后由 阳顺 于 2019-6-7 22:22 编辑


感谢,能达到我要的结果了,就是最后每次实例化的时候重复输入这个对象参数,看着有点别扭,有没有不改变底下调用的代码来实现的方法吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-8 08:53:40 | 显示全部楼层
阳顺 发表于 2019-6-7 22:20
感谢,能达到我要的结果了,就是最后每次实例化的时候重复输入这个对象参数,看着有点别扭,有 ...

调用locals也行,我觉得你既然是像显示属性,还是赋给属性好
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-8 09:14:08 | 显示全部楼层
阳顺 发表于 2019-6-7 22:17
你这个for in块实现的什么
globals()   python有这个函数方法吗


python把你定义的函数、变量等都放在一个字典中,globals()。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-8 11:23:31 | 显示全部楼层
冬雪雪冬 发表于 2019-6-8 09:14
python把你定义的函数、变量等都放在一个字典中,globals()。

明白了,非常感谢老师的解答,两位都实现了程序要求的结果。只能选一个正确答案,那就按先后顺序吧。
祝:生活愉快,天天向上,年年向钱
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-8 14:29:02 | 显示全部楼层
阳顺 发表于 2019-6-8 11:23
明白了,非常感谢老师的解答,两位都实现了程序要求的结果。只能选一个正确答案,那就按先后顺序吧。
祝 ...

塔利班的方法更好,更简便。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-1 02:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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