免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 24224 | 回复: 26
打印 上一主题 下一主题

python里面的self和_int_具体作用和怎么理解它们? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-25 17:09 |只看该作者 |倒序浏览
大家好呀,python里面的self和_int_具体作用和怎么理解它们?
我看了好几遍书,都觉得有点怪怪的!
sample:
class Person:
         def _init_(self,name):
                  self.name=name
         def sayhello(self):
                  print 'My name is:',self.name
p=Person('tianya')
print p

上面的例子是我看沈洁元的简明python教程时看到的,但是看了几遍不明白呀!

[ 本帖最后由 tianyaamy 于 2006-11-25 17:22 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-11-25 18:49 |只看该作者
init 是对类进行初始化。
self 就是类本身自己,上面这个实例,
def __init__(self,name)
        self.name = name
表示把name赋值给类本身的变量name
,self相当于c++中的this


呵呵 也不知道对不对。  刚刚看了3个小时的python,说的不正确请见谅。

论坛徽章:
0
3 [报告]
发表于 2006-11-26 23:02 |只看该作者
__init__是构造函数(constractor)
self用在函数参数是指类自己,python自己用到的。在类方法里必须作为第一个参数出现(换成abcd也行,不过写成self是约定)
如果self用在类其他地方,就是本身

论坛徽章:
0
4 [报告]
发表于 2006-11-28 12:06 |只看该作者
如果看过JAVA就很好理解了

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2006-11-29 02:25 |只看该作者
原帖由 okmmno1 于 2006-11-25 18:49 发表
init 是对类进行初始化。
self 就是类本身自己,上面这个实例,
def __init__(self,name)
        self.name = name
表示把name赋值给类本身的变量name
,self相当于c++中的this


呵呵 也不知道对不对。 ...


self不是类本身,而是实例本身。

论坛徽章:
0
6 [报告]
发表于 2006-11-29 09:00 |只看该作者
楼上的各位,还是好好看看那个dive into python再来发言吧。
ps:5.3 类的初始化

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2006-11-29 11:33 |只看该作者
原帖由 海天 于 2006-11-29 09:00 发表
楼上的各位,还是好好看看那个dive into python再来发言吧。
ps:5.3 类的初始化


这种回答最搞笑,知道就说出来,不知道就不要指点“你去看某家书再来”

(learning python)
...the first argument (called self by convention) references the instance object being processed; assignments to attrbutes of self create or change data in the instance, not the class.


不是指实例您还看出什么新意义?

论坛徽章:
0
8 [报告]
发表于 2006-11-29 15:36 |只看该作者
原帖由 l4kernel 于 2006-11-29 11:33 发表


这种回答最搞笑,知道就说出来,不知道就不要指点“你去看某家书再来”

(learning python)
...the first argument (called self by convention) references the instance object being processed; assign ...

楼上的兄弟,其实我觉得多看几遍书是没有什么坏处的啊,书读多便,其意自现!这个道理不明白吗?
ps:顺便说一下我对这个self和__init__的理解:
class Person:
         def _init_(self,name):
                  self.name=name
         def sayhello(self):
                  print 'My name is:',self.name
p=Person('tianya')
print p

self:是指向你新创建对象实例的引用,在这个地方指向你创建的Person类的实例p。当你调用Person类创建实例时,self指的就是你这个P,所以这个地方p=Person('tianya')应该为:p=Person(self,'tianya'),只不过Python自动替你加上而已。:),当你用init进行初始化时,那个self.name实际上就会被p.name所代替,同样在sayhello的那个print中“print 'My name is:',p.name”如果没有self,那么指向Person类的实例P的引用如何才能调用呢?
__init__:是在类的实例被创建后才被调用的,只要用于初始化一个类的实例。当然一个类也可以没有__init__的,上面的例子中,当你创建了p以后,这个__init__会被立刻调用,会执行P.name=name,所以当你执行p=Person('tianya')时,“tianya”会被当作参数传到__init__中,执行P.name='ianya',如果你执行p.name 或者print p.name 则会显示:’tianya‘.

不知道你明白了没有啊?
另外那个self.name相当与是创建了一个数据属性(实例的变量)。变量名是name,值是你传进来的那个'tianya'.
如果再不懂,我建议你还是看书吧,多看几遍。(也许我说的还不是很清楚 :)

论坛徽章:
0
9 [报告]
发表于 2006-11-29 15:40 |只看该作者
CU是一个自由的论坛,我认为,但是不要意气用事,高手很多,当然我也不会贴一段英文的东西来证明什么的。因为对象我这样的新手来说,可能理解有点难哦。不过还是非常感谢l4kernel
没有你的鞭策,可能我还不会理解这么深,谢谢。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2006-11-29 18:22 |只看该作者
海天同学,我没有用中文学过计算机,所以不好意思,贴了段英文。

您说了半天,self还是指实例的意思,对self.var的改动影响直接施加于self上。

我昨天路过,顺便纠正一下前面人的错误。您这种半桶水出来吊书袋,难为了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP