【问题标题】:Create an object of the same class within the class在类内创建同一个类的对象
【发布时间】:2018-08-10 16:33:18
【问题描述】:

我想在一个类中拥有一个类的对象,因为我需要将它传递给一个方法,类似于下面的示例。我希望下面的示例打印出 1 或 fooObj.fooNum,但我不断收到 NameError: name 'foo' is not defined

class bar:
    def fooDef(self, fooObj):
        print fooObj.fooNum

class foo:
    fooNum = 1
    b = bar()
    f = foo()
    b.fooDef(f)

【问题讨论】:

  • 你为什么要把代码放在foo类定义中?
  • 如果您从foo.__init__() 引用foo,它应该可以工作,但不能作为类变量。我想。
  • 这似乎是无效的类设计:foo 中有类级代码,它试图创建自己的类的对象(没有初始化),将对象传递给 bar的实例方法,然后通过对象访问foo类属性。
  • @user2357112 实际上,这是一段更大的代码,我必须在其中传递 self 或我所在的类的实例化。
  • @AlastairMcCormack 你能澄清一下吗?我不太明白你的意思,这是否意味着我必须在 foo 类中创建一个def __init__(self),然后才能声明一个对象?

标签: python python-2.7 class object


【解决方案1】:

请问,您能更具体地说明您要做什么吗?

你看到的错误是正常的,因为class foo下面的代码会在foo的定义过程中被执行,所以这个类还没有定义。

如果我理解得很好,您想定义类foo 的一些方法foobar,它将使用foo 实例。正确的程序是

class foo:
    def foobar(self,):
        f = foo()
        ...

再次重申,如果您提供有关您正在尝试做的事情的更多详细信息,它会更容易为您提供帮助。

【讨论】:

  • 我想创建类 A 的实例化,然后将其传递给类 b 的方法,而我在类 A 中。
  • @DhruvJain:你为什么要在“我在 A 班”的时候这样做?听起来您对直接在类语句的主体中执行代码的含义有一些深刻的误解,但很难说出这种误解可能是什么。
  • 好的,那么我的回答确实适用,只需将 ... 替换为 b = bar()b.fooDef(),@Maurice-Meyer 的解决方案也很有效,可能更接近您的需求。不同之处在于__init__ 只是在foo 的实例中直接调用(所以只有一次)。
【解决方案2】:

虽然不清楚您要问什么,但以下更改可以满足您的要求。
但是代码使用foo()的实例而不是类:

class bar:
    def fooDef(self, fooObj):
        print fooObj.fooNum

class foo:
    def __init__(self):
        self.fooNum = 1
        b = bar()
        f = self
        b.fooDef(f)

f = foo()

打印:

1

【讨论】:

  • 非常感谢!这正是我想做的!
猜你喜欢
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 2022-01-16
  • 1970-01-01
  • 2014-07-23
  • 2018-08-29
  • 1970-01-01
相关资源
最近更新 更多