风船野 发表于 2022-9-22 23:49:35

self的用法

本帖最后由 风船野 于 2022-9-23 11:31 编辑

python类中的self表示了什么?
下面这段代码中在isLeftChild方法中的 == self判断时,self代表的是什么?
replaceNodeData方法中的=self赋值时self又代表什么?

class TreeNode:
    def __init__(self, key, val, left=None, right=None, parent=None):
      self.key = key
      self.payload = val
      self.leftChild = left
      self.rightChild = right
      self.parent = parent

    def hasLeftChild(self):
      return self.leftChild

    def hasRightChild(self):
      return self.rightChild

    def isLeftChild(self):
      return self.parent and self.parent.leftChild == self

    def isRightChild(self):
      return self.parent and self.parent.rightChild == self

    def isRoot(self):
      return not self.parent

    def isLeft(self):
      return not (self.rightChild or self.leftChild)

    def hasAnyChild(self):
      return self.rightChild or self.leftChild

    def hasBothChild(self):
      return self.rightChild and self.rightChild

    def replaceNodeData(self, key, value, lc, rc):
      self.key = key
      self.payloda = value
      self.leftChild = lc
      self.rightChild = rc
      if self.hasLeftChild():
            self.leftChild.parent = self
      if self.hasRightChild():
            self.rightChild.parent = self

代码出处:
B站数据结构与算法python版二叉查找树操作:
https://www.bilibili.com/video/BV1VC4y1x7uv/?p=68

lassiter 发表于 2022-9-23 00:04:35

self就像他的翻译,代表的是自身,当你实例化对象后,对象内的self就指的是实例化对象自身。

jackz007 发表于 2022-9-23 00:12:45

本帖最后由 jackz007 于 2022-9-23 00:23 编辑

      self 只能在定义对象的方法中可见,而且,一定是隐含存在的第一个参数。self 就是对象自身,例如,a = 8,对象 a 的 self 就是 8,a = 'ABC',对象 a 的 self 就是 'ABC',a = ['A' , 'B' , 'C'] 那么,对象 a 的 self 就是 ['A' , 'B' , 'C'],你可以新建继承自 int、str、list 的类,然后,编写新的方法,把 self 打印出来看看就知道了。
      对于其它对象
class A():
    def foo(self):
      pass

a = A()
a . foo()
      调用 a . foo() 时,传入 foo() 中的 self 就是对象 a

hveagle 发表于 2022-9-23 06:49:23

对象自身

Twilight6 发表于 2022-9-23 07:02:32


Python 中的 self 表示实例本身,即当你定义一个 A 类,对 A 类进行初始化赋值,例如 a = A()

此时 self 就表示 a 这个实例对象本身,而你代码 replaceNodeData 函数方法中的左右子孩子节点,是将 self 设置为父节点,即此时的实例对象设置为左右孩子节点的父节点


kerln888 发表于 2022-9-23 08:05:31

实例自身{:10_256:}

一点点儿 发表于 2022-9-23 11:44:10

实例自己{:10_256:}

南宫轩痕 发表于 2022-9-23 18:35:20

{:10_256:}{:10_256:}{:10_256:}
页: [1]
查看完整版本: self的用法