【问题标题】:What is (self) in the python code? (OOP question)python代码中的(self)是什么? (面向对象问题)
【发布时间】:2011-02-27 00:01:26
【问题描述】:
class MyController(BaseController):

    def index(self):
        # Return a rendered template
        #return render('/test.mako')
        # or, return a response
        return ''

为什么函数“index”有“self”?

我从 Pylons 控制器获得了这段代码

【问题讨论】:

标签: python model-view-controller oop controller pylons


【解决方案1】:

每当调用对象中的方法时,传递给该方法的第一个参数就是对象本身。如果你没有将第一个参数定义为你正在使用的对象,你会得到一个 TypeError 异常。

【讨论】:

    【解决方案2】:

    许多语言,如 C++ 和 Java,在成员函数中都有一个隐式指针。在那些语言中,它是“this”。另一方面,Python 需要为该指针指定一个显式名称。按照惯例,它是“self”,尽管您实际上可以将任何您喜欢的东西放在那里,只要它是一个有效的标识符。

    【讨论】:

      【解决方案3】:

      它是一个成员函数(一个属于类的函数),所以当它被调用时,它被调用的对象会自动作为第一个参数传递。

      例如:

      c = MyController()
      c.index()
      

      将调用indexself 等于cself 是标准名称,但您可以随意称呼它

      【讨论】:

      • 那我可以在函数“index”中使用“self”吗?打印 self.value
      • @alex 是的,如果MyController 有一个名为value 的东西(字段、函数等)
      • 如果我声明一个类,然后将函数放入其中,我可以将“self”作为每个函数的参数吗?是否建议将“self”作为所有参数的第一个参数,然后是其他参数?
      • @alex 如果它们不是静态方法或类方法(默认情况下不是),Python 会将实例作为第一个参数传递,因此您需要有一个变量来接收它,你不能跳过它。您可能应该阅读 Python 教程的 Classes 部分
      猜你喜欢
      • 2021-07-30
      • 1970-01-01
      • 2022-06-13
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      • 2018-06-27
      相关资源
      最近更新 更多