鱼C论坛

 找回密码
 立即注册
查看: 811|回复: 2

[已解决]关于__init__(self)

[复制链接]
发表于 2020-4-30 20:20:09 | 显示全部楼层 |阅读模式

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

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

x
  1. class name:
  2.     def __init__(self,arg):
  3.         self.name = arg
  4.     def say(self):
  5.         print('我的名字是:{}'.format(self.name))

  6. x = name('吉良吉影')
  7. print('我的名字是{}'.format(x))
  8. x.say()
  9. print(type(x))
复制代码


输出结果是
  1. 我的名字是<__main__.name object at 0x000001DB69664C10>
  2. 我的名字是吉良吉影
  3. <class '__main__.name'>
复制代码


1、为什么直接输出x会是<__ma......10>,但是x.say就可以输出字符串,不是都是print吗?还有<__ma......10>是个什么东西?

2、为什么在这里把x.say改成 say(x)会报错?
最佳答案
2020-4-30 20:22:30
1. 直接 str(name) 得到的结果就是那样,把第八行改成这样就可以了:

  1. print('我的名字是{}'.format(x.name))    # 访问实例的属性 name
复制代码


2. 没有定义过叫 say() 的函数,say() 方法在这里是只属于 name 的实例 x 的,所以要先加上 x. 再写 say()
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-30 20:22:30 | 显示全部楼层    本楼为最佳答案   
1. 直接 str(name) 得到的结果就是那样,把第八行改成这样就可以了:

  1. print('我的名字是{}'.format(x.name))    # 访问实例的属性 name
复制代码


2. 没有定义过叫 say() 的函数,say() 方法在这里是只属于 name 的实例 x 的,所以要先加上 x. 再写 say()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 20:38:47 | 显示全部楼层
“x.say”也可以换成:
  1. name.say(x)
复制代码

调用x.say时python会自动帮你把前面的对象x填到第一个参数(self)里,这也是为什么每个对象的方法都要加一个参数self
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-18 16:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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