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

2024-02-03

我正在通过书籍和互联网学习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 不是关键字,它只是一个参数名称,例如a and b,所以你可能会想使用this相反,如果您有 Java 背景...请不要这样做!有一个非常强大的使用约定self为了这个目的,如果你使用其他任何东西,你会让很多人(最终包括你自己)非常生气!

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

Edit

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

如果我们看看你的班级:

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

我们可以通过将第二行更改为来更改它以接受参数 bazdef __init__(self, baz):然后如果我们愿意的话我们可以做baz我们的新实例的一个属性BAR通过设置self.baz = baz。希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在另一个类中创建类的实例(使用通用示例) 的相关文章

随机推荐