鱼C论坛

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

[已解决]关于__init__(self)

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

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

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

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

x = name('吉良吉影')
print('我的名字是{}'.format(x))
x.say()
print(type(x))

输出结果是
我的名字是<__main__.name object at 0x000001DB69664C10>
我的名字是吉良吉影
<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) 得到的结果就是那样,把第八行改成这样就可以了:
print('我的名字是{}'.format(x.name))    # 访问实例的属性 name

2. 没有定义过叫 say() 的函数,say() 方法在这里是只属于 name 的实例 x 的,所以要先加上 x. 再写 say()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-30 20:22:30 | 显示全部楼层    本楼为最佳答案   
1. 直接 str(name) 得到的结果就是那样,把第八行改成这样就可以了:
print('我的名字是{}'.format(x.name))    # 访问实例的属性 name

2. 没有定义过叫 say() 的函数,say() 方法在这里是只属于 name 的实例 x 的,所以要先加上 x. 再写 say()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 20:38:47 | 显示全部楼层
“x.say”也可以换成:
name.say(x)
调用x.say时python会自动帮你把前面的对象x填到第一个参数(self)里,这也是为什么每个对象的方法都要加一个参数self
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 00:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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