|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
问题:我想问问下列两个代码,一个去掉self 一个加上为什么会有两个不一样的结果呢,在函数方法当中直接引用一个外围的变量感觉没有问题诶,是不是和这个变量__name 是私有变量有关呢?请指教!
后上代码:
- class Person:
- __name = "小甲鱼"
- def kick(self):
- print("我是%s" % self.__name)
-
- >>> a = Person()
- >>> a.kick()
- 我是小甲鱼
复制代码
这样是正确的。但是下面这个:
- class Person:
- __name = "小甲鱼"
- def kick(self):
- print("我是%s" % __name)
-
- >>> a = Person()
- >>> a.kick()
- Traceback (most recent call last):
- File "<pyshell#31>", line 1, in <module>
- a.kick()
- File "<pyshell#29>", line 4, in kick
- print("我是%s" % __name)
- NameError: name '_Person__name' is not defined
复制代码
首先 __name 是在类内,类方法外的空间,那么这个__name 变量就属于类变量
而当你想使用这个类变量时候,就需要带上类名,而你直接 self.__name 是因为你创建了实例,而实例空间找不到 __name 变量,就要去类对象找,类对象找到了 __name 变量所以成功返回
而你直接 __name 会导致在实例对象中找不到 __name 属性,所以导致报错
区别就在于你是否带类名和不带类名了,你带 self 本质上还是查找到之前类对象的 __name 属性,因为 __name 是类属性
|
|