python初学者021 发表于 2021-5-13 16:43:15

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))

suchocolate 发表于 2021-5-13 18:09:21

self是类的实例,self.x是实例变量,不在函数内部定义的变量叫类变量。
我觉得你还是看看教程吧,教程解释的比较清楚:https://www.runoob.com/python3/python3-class.html

阿奇_o 发表于 2021-5-13 19:56:04

本帖最后由 阿奇_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.)),

yyl999 发表于 2021-5-13 21:22:04

阿奇_o 发表于 2021-5-13 19:56
其实不用self,也行。
你写个 obj,或写个 zhangsan,lisi都行。只要你在类里统一用它就行。 ...

学习了
页: [1]
查看完整版本: class中的def,调用变量,为什么都要加上 self ?