zwjwwxa 发表于 2024-9-5 19:24:19

不理解对象里self.到底啥意思,求助大佬们

class Person:
    def __init__(self,name):
      self.__name = '小甲鱼'
    def getname(self):
      return self.__name

   
p = Person()
第三行代码,也相当于定义了一个私有变量吗
书里描述的是在变量名前加__,但是明明__前还有个self呀,怎么算是定义了一个私有变量呢

FishC 发表于 2024-9-5 19:33:31

你好,鱼油!

`self` 是指代类的实例本身。`self.__name` 是在实例内部定义并访问变量的方式。

在第三行代码 `self.__name = '小甲鱼'` 中:
- `self` 表示当前实例。
- `.__name` 是实例的一个属性。
- 前面的 `__` 是用来定义私有变量的,即在类外部不容易直接访问这个变量。

所以,虽然看起来有 `self`,但实际定义了 `self.__name` 这个私有变量。`self` 是必须的,它让你能在类的方法中访问和修改实例的变量。

希望这样解释能让你明白,`self` 不影响变量的私有性,它只是让你知道这个变量是属于某个实例的。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

小甲鱼的二师兄 发表于 2024-9-5 20:58:06

self 是对象自身,在这里是 p

私有变量名约定是 __ 开头,所以这个私有变量叫 __name

self.__name 在这个案例中相当于 p.__name,p 对象中的私有变量 __name

jackz007 发表于 2024-9-5 21:05:06

本帖最后由 jackz007 于 2024-9-5 21:13 编辑

      1、self 只能出现在类方法的定义中,用来指代调用方法的对象本身。
      2、self 往往是类方法的第一个参数,在调用的时候不会显式地出现。
         比如:
ax . foo(a , b , c)
         当这样调用对象的方法时,对应的方法定义应该是这样的:
def foo(self , p1 , p2 , p3) :
         形式参数 self 就是调用方法的对象 ax,这样,在方法 foo() 中,通过 self 就可以访问到属于对象 ax 的所有属性。
         例如:
         self . name 对应于 ax . name
         self . age    对应于 ax . age
         等等

歌者dddddgz 发表于 2024-9-5 21:44:27

self也是一个变量,变量可以有属性
页: [1]
查看完整版本: 不理解对象里self.到底啥意思,求助大佬们