【问题标题】:OOP - Call function containing instance of class within the same classOOP - 在同一类中调用包含类实例的函数
【发布时间】:2018-07-17 07:51:54
【问题描述】:

我是编程新手,对实例、类和静态变量进行了一些研究。最近,我尝试简化项目中的代码,以帮助我学习更多 Python 知识。在这个特定的实例中,我希望能够调用 somefoo() 函数,该函数将根据条件将参数分配给 init 实例变量一和二。据我了解,为了调用 somefoo() 函数,必须实例化 Foo() 类;但是,该类所需的参数位于该类的 somefoo() 函数中。提前谢谢!

import random
    class Foo():
        def __init__(self, one, two):
            self.foobar = random.random()
            self.one = one
            self.two = two

        def somefoo(self):
            if self.foobar > 0.5:
                one = ':)'
                two = 1
                Foo(one, two)
            if self.foobar < 0.5:
                one = ':('
                two = 0
                Foo(one, two)

        somefoo()

【问题讨论】:

  • 你的想法是对的,实例化类,调用类方法。而不是调用Foo(one, two) 使用self 设置这些成员变量,请参见此处:pastebin.com/raw/nDb72CDy

标签: python-3.x function class oop instance-variables


【解决方案1】:

首先,我什至不知道您是否在将代码发布到此处寻求帮助之前检查,因为它确实有问题。有很多语法错误。本来就应该是这样的……

import random
class Foo:
    def __init__(self, one, two):
        self.foobar = random.random()
        self.one = one
        self.two = two

    def somefoo(self):
        if self.foobar > 0.5:
            one = ':)'
            two = 1
            Foo(one, two)
        if self.foobar < 0.5:
            one = ':('
            two = 0
            Foo(one, two)

somefoo()

类名前有括号,在python中不是必需的,还有无用的缩进。 Python 在缩进方面是敏感的,因此请确保您的缩进有意义,并合乎逻辑地使用它们。现在来回答你的问题;这是如何完成的:

import random
class Foo:
    def __init__(self, one, two):
        self.foobar = random.random()
        self.one = one
        self.two = two
        self.somefoo()

    def somefoo(self):
        if self.foobar > 0.5:
            self.one = ':)'
            self.two = 1
        if self.foobar < 0.5:
            self.one = ':('
            self.two = 0
    def __str__(self):
        return str(self.one)+" "+str(self.two)
print(Foo(10,20))

基本上你试图调用 somefoo 的部分没有错,是的,当它在内存中创建一个对象时,python 确实将类执行到底部,但在你的代码中,方法是绑定类型(即它需要和对象执行)。所以你可以做的是使用某种对象工厂模式,或者使用我上面粘贴的那种,一旦生成对象,它就会调用绑定方法来刷卡数据有问题的实例并显示输出。在 python3 中引入了未绑定方法,这些方法可以在没有 self 对象引用的情况下使用。确保您也了解它们以及它们是如何工作的,因为它们可能会帮助您找到更灵活的解决方案来解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 2015-08-26
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多