python - 在另一个类中创建类的实例(使用通用示例)

标签 python class instance

我正在通过书本和互联网学习 Python,但遇到了类问题。

2个问题:

  1. 如何在另一个(单独的)类中创建一个类的实例?
  2. 如何在类和嵌套(?)类之间传递变量?

当我尝试在另一个(单独的)类中创建一个类的实例时,我能够在一个方法中这样做。这是代码:

import os

class FOO():
    def __init__(self):
        self.values = [2, 4, 6, 8]

    def do_something(self, x, y):
        os.system("clear")
        z = self.values[x] * self.values[y]
        print "%r * %r = %r" % (self.values[x], self.values[y], z)


class BAR():
    def __init__(self):
        pass

    def something_else(self, a, b):
        foo1 = FOO()
        foo1.do_something(a, b)

bar = BAR()
bar.something_else(1, 2)

但是,这是否允许我访问 FOO 类及其在其他 BAR 方法中的信息?如果是,怎么办?

我尝试了以下但出现错误:

import os

class FOO():
    def __init__(self):
        self.values = [2, 4, 6, 8]

    def do_something(self, x, y):
        os.system("clear")
        z = self.values[x] * self.values[y]
        print "%r * %r = %r" % (self.values[x], self.values[y], z)


class BAR():
    def __init__(self):
        foo1 = FOO()

    def something_else(self, a, b):
        foo1.do_something(a, b)

bar = BAR()
bar.something_else(1, 2)

这里是错误:

Traceback (most recent call last):
File "cwic.py", line 22, in <module>
bar.something_else(1, 2)
File "cwic.py", line 19, in something_else
foo1.do_something(a, b)
NameError: global name 'foo1' is not defined

我在使用时遇到了同样的错误:

def __init__(self):
    self.foo1 = FOO()

此外,我应该如何将“值”从一个类传递到另一个类?

如果我的一般方法和/或语法有误,请告诉我。

最佳答案

实例或类的所有属性都通过 self 访问,它作为第一个参数传递给所有方法。这就是为什么您正确地获得了方法签名 something_else(self, a, b) 而不是像其他语言那样只是 something_else(a, b) 。所以你在寻找:

    class BAR():
        def __init__(self):
            self.foo1 = FOO()

    def something_else(self, a, b):
        self.foo1.do_something(a, b)

请注意,self 不是关键字,它只是一个参数名称,如 ab,因此您可能会想使用 this 相反,如果您来自 Java 背景...不要!为此目的使用 self 有一个非常严格的约定,如果您使用其他任何东西,您会让很多人(最终包括您自己)非常生气!

关于传递值,我不确定你的意思,你可以通过实例访问它们,例如 foo1.an_attribute 或者将它们作为参数传递给函数,如 function(arg ) 但您似乎在您的示例中使用了这两种技术,所以我不确定您还有什么需要...

编辑

作为对@dwstein 评论的回应,我不确定它在 VB 中是如何完成的,但这是在创建类的实例时如何传递参数。

如果我们看看你的类(class):

class BAR():
    def __init__(self):
        self.foo1 = FOO()

我们可以通过将第二行更改为 def __init__(self, baz): 来将其更改为接受参数 baz,然后如果需要,我们可以使 baz 成为一个属性我们的 BAR 新实例通过设置 self.baz = baz。希望对您有所帮助。

关于python - 在另一个类中创建类的实例(使用通用示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12008991/

相关文章:

python - GIL 如何处理分块 I/O 读/写?

Python:检查上传的文件是否为jpg

java - 尝试使用 java printwriters 附加文本文件

perl - 列出类的实例对象

Haskell:实例参数化类型一种单一类型

python - subprocess.Popen 的管道输出到文件

python - dask mro 由于从 Windows 到 Linux 的转换而出错

Java:创建对象实例时带括号的类名

class - 定义没有setter ecma6的getter - react

java - 识别 java 中 gerDeclaredMethod 所需参数的类类型