Python 类内方法函数的内部变量,命名,加'self.'变成 self.xxx 和不加直接 xxx 有什么区别?

2014-03-02 18:37:57 +08:00
 Matrix24
具体的如下:
class AAA(object):
def Go(self):
self.one = 'hello'

和下面的
class AAA(object):
def Go(self):
one = 'hello'

两者的one,有什么区别?
7192 次点击
所在节点    Python
15 条回复
Matrix24
2014-03-02 18:50:01 +08:00
为毛不可以修改问题。问题是这样子的:
具体的如下:
class AAA(object):
····def Go(self):
········self.one = 'hello'

和下面的
class AAA(object):
····def Go(self):
········one = 'hello'

两者的one,有什么区别?
binux
2014-03-02 18:53:26 +08:00
我去,你自己发了两篇讲这个的文章你自己都没看过吗?
Matrix24
2014-03-02 18:55:39 +08:00
@binux 哈哈,文章还是有瑕疵。除了这个地方没说。你知道么,可爱的网友?
binux
2014-03-02 18:56:50 +08:00
hahastudio
2014-03-02 19:01:07 +08:00
https://gist.github.com/hahastudio/9304929

你自己试试就知道了
AAA中的one,是attribute
下面的AAA中的one,是method Go的local variable
Matrix24
2014-03-02 19:06:35 +08:00
@binux 其实我就想问一句,class下的def XXX里面的定义的变量,加self和不加有什么区别,它是不是和其他的一样?

因为我现在认为__init__()下是一个特殊的区域,在这里定义self.xxx是正常可以引用的实例化变量
但是在class下和def并列的时候,定义 self.XX就不会引用成功
同样,我怀疑在def内,变量加和不加self都不同。

我有点混乱,求指点
binux
2014-03-02 19:12:17 +08:00
@Matrix24 __init__除了一开始被自动调用以外,没有任何特殊的地方
Matrix24
2014-03-02 19:19:37 +08:00
@binux
class AAA():
········self.a='5'
········def go(self):
················pass


b=AAA()
b.a

---------
为什么不可以在class内和def平行关系,定义self.XXX这种实例化变量?
iEverX
2014-03-02 19:22:15 +08:00
class Example(object):
a = 0 # 定义在类里面,是类的属性

def hello(self):
self.c = 3 #

def print(self):
print self.a, self.c


e = Example()
e.hello()
e.print() # 0 3
binux
2014-03-02 19:23:06 +08:00
@Matrix24 哪来的self?你以为你写def go(self):的self都是摆看的啊?
Matrix24
2014-03-02 19:28:06 +08:00
@binux 你的意思是说,所有定义的self.XXX是函数内的(self)决定的,突然明白了。哈哈,被打醒了,ThankYou,谢谢你的耐心~~
wuyadong
2014-03-02 22:30:17 +08:00
....
Fedor
2014-03-02 22:36:41 +08:00
一个是对象的属性。
一个是方法里的局部变量。
qianlifeng
2014-03-03 09:15:04 +08:00
self的一个功能就是为了区分对象属性和局部变量?
Shared
2014-03-03 12:23:10 +08:00
@qianlifeng 不是为了区分,而是 self 就是 class 实例化后的对象本身,你把 self 改成别的都无所谓,只不过大家约定的用 self

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/102545

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX