鱼C论坛

 找回密码
 立即注册
查看: 2830|回复: 8

有关print,self ???

[复制链接]
发表于 2017-2-20 10:51:45 | 显示全部楼层 |阅读模式

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

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

x
class Person:
    def __init__(self,name):
        self.name=name
    def sayhello(myname):
        print( 'My name is:%s' % self.name)
p=Person('Bill')
print (p)


结果显示:
<__main__.Person object at 0x000001105DD99668>
不知道是哪儿出了问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-20 11:28:00 From FishC Mobile | 显示全部楼层
你的这个程序是不是想输出你给出的名字。我这样改了一下
class Person:
    def __init__(self,name):
        self.name=name
    def sayhello(self):
        print( 'My name is:%s' % self.name)
p=Person('Bill')
p()
不知道你的sayhello函数里myname参数是干嘛的。不过这个函数的参数里要加上self,这样才能访问到self.name
你这个print(p) 貌似是吧p对象的地址打印出来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-20 11:57:58 | 显示全部楼层
冷笑寒风 发表于 2017-2-20 11:28
你的这个程序是不是想输出你给出的名字。我这样改了一下
class Person:
    def __init__(self,name):

class Person:
    def __init__(self,name):
        self.name=name
    def sayhello(self):
        print( 'My name is:%s' % self.name)
p=Person('Bill')
p()

结果是:

  File "C:/Users/junxue/.spyder-py3/temp.py", line 273, in <module>
    p()

TypeError: 'Person' object is not callable
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-20 17:00:04 | 显示全部楼层
有人吗?请解决下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-20 20:15:51 | 显示全部楼层
前面是对的。
后面你的p经过类Person的实例化之后就是一个实例了
如果要输出名字只需要调用实例的函数即可
输入p.sayhello()
选区_002.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-20 20:52:57 | 显示全部楼层
SapiensC 发表于 2017-2-20 20:15
前面是对的。
后面你的p经过类Person的实例化之后就是一个实例了
如果要输出名字只需要调用实例的函数即 ...

我是把self当作C++中的this来理解的。可第二个小程序又怎么理解呢。两个结果都一样
class Person:
    def __init__(self,name):
        self.name=name
    def sayhello(self):
        print( 'My name is:%s' % self.name)
p=Person('Bill')
p.sayhello()
print (p)

结果是My name is:Bill
<__main__.Person object at 0x000001105DA557F0>

class Person:
    def __init__(myname,name):
        myname.name=name
    def sayhello(myname):
        print( 'My name is:%s' % myname.name)
p=Person('Bill')
p.sayhello()
print (p)
结果是My name is:Bill
<__main__.Person object at 0x000001105DA55C50>

两个结果是一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-21 14:53:16 | 显示全部楼层
百度里面是这样写的:
首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的。self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。

self名称不是必须的,在python中self不是关键词,你可以定义成a或b或其它名字都可以,但是约定成俗,不要搞另类,大家会不明白的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-21 14:54:12 | 显示全部楼层
self指的是类实例对象本身(注意:不是类本身)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-21 21:27:02 | 显示全部楼层
jasonzheng 发表于 2017-2-20 20:52
我是把self当作C++中的this来理解的。可第二个小程序又怎么理解呢。两个结果都一样
class Person:
     ...

据我所知,在类定义中,__init__(self,X)的定义是要求的,其中的内在机制我不是很了解。
你这里的两个脚本中,第二个就是把第一个的self改成了myname,从程序的完整性看是没有问题的。
说明不要self也不会影响到程序的实现。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-6 20:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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