【问题标题】:Python how to get self from class function?Python如何从类函数中获取自我?
【发布时间】:2021-05-23 19:33:52
【问题描述】:

我可以从类函数中获取 self 吗?例如:

class abc:
  def __init__(self, name):
    self.name = name
  def printname(self):
    print(self.name)

x = abc("test").printname()

我想从x获取原始类obj abc("test")而不使用return self或首先定义x = abc("test"),可以吗?

【问题讨论】:

  • x 中没有任何内容,只有一个 None 值,因为printname() 没有返回任何内容。所以从None 你什么都做不了
  • 你的问题包括两个非常好的解决方案——一个是让printname返回对象,另一个是直接将x分配给对象。这两个有什么问题?
  • 我想强调@azro 所说的,你的x 值存储None,因为你的函数没有返回任何东西。因此,将无法获得课程。如果您使用abs('test').printname,(请注意缺少右括号,因此我们没有调用该函数)您可以使用该类。 x.__self__.
  • “我想在不使用琐碎且唯一的方法的情况下实现某事,可以吗?”这就是你的问题在我们看来,你明白吗?
  • @Samwise 这是一个例子

标签: python python-3.x class object self


【解决方案1】:

简短的回答是否定的。

更长的答案:

  1. printname 不是“类函数”,它是一个实例方法class 方法是将类作为第一个参数的方法。大多数方法都是instance方法;他们将self(类的特定实例)作为第一个参数。如果这确实是一个类方法,则不会有与之关联的“自我”。

  2. 您所说的“类对象”是abc 类的实例abc 本身就是一个对象(Python 中的一切都是一个对象,包括类定义),但这与调用abc("test") 得到的实例不同。

  3. 任何时候您想要获取特定函数调用的本地值并使其可供调用者使用(包括其参数),您需要return 它。从技术上讲,还有其他技巧涉及在调用者范围内改变状态,但这些技巧不适用于您的示例。如果您以return self 行结束printname,那么执行x = abc("test").printname() 将导致实例被分配给x

  4. 在你的例子中,调用者是构造实例的那个,所以简单地写这个也可以解决问题:

x = abc("test")
x.printname()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 2011-08-12
    • 2023-01-18
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多