class中的def,调用变量,为什么都要加上 self ?
各位前辈,我在看python中class的例子的时候,在class中def,如果调用变量,一定要加上self,这个是什么原理啊?
难道是在def中,通过self,调用上层(class)中的变量?
通过这种办法,也可以在不同def中共享变量?
谢谢大家了!
class people:
name = ''
age = 0
__weight = 0
def __init__(self,n,a,w):
self.name = n # 这个地方一定要加上 self
self.age = a # 这个地方一定要加上 self
self.__weight = w
def speak(self):
print("%s 说: 我 %d 岁。" %(self.name,self.age)) self是类的实例,self.x是实例变量,不在函数内部定义的变量叫类变量。
我觉得你还是看看教程吧,教程解释的比较清楚:https://www.runoob.com/python3/python3-class.html 本帖最后由 阿奇_o 于 2021-5-13 20:07 编辑
其实不用self,也行。{:10_297:}
你写个 obj,或写个 zhangsan,lisi都行。只要你在类里统一用它就行。
为啥行呢?—— 因为它本质是代表 这个类的 一个实例化对象。
既然是个对象,叫啥名实际上不要紧,关键要长得好看。。
当你看见 instance=MyClass() 或 object=MyClass() 时,就是 MyClass这个类的 一种实例化。
但在类定义里,约定俗成 都用 self 来指代 该类的实例化对象。
为啥这样约定俗成?——因为对象名(它自己self),会被传进来,完成初始化(被写到命名空间里...)
self.name, self.xxx 这些带self.修饰的变量,叫【实例变量】。即 某个实例对象所直接拥有的某个属性,都可以在实例化后通过 instance.name 来调用。
没带self,且不在类方法里的,叫 类变量。通常作为公共的,类里都可以访问的变量。但 实例对象会先看自己有没有,再看类变量有没有。
没带self,但在类方法里定义的,叫 局部变量(只作用于该方法内,除非加global关键字)。
特别的,当多个类方法发生嵌套时,会出现“闭包”的概念,和一个叫“自由变量”的概念(特殊的局部变量,即不是一般的局部变量,也不是类变量,也不是实例变量(没带self.)),
阿奇_o 发表于 2021-5-13 19:56
其实不用self,也行。
你写个 obj,或写个 zhangsan,lisi都行。只要你在类里统一用它就行。 ...
学习了
页:
[1]