OOP - 包含同一类中的类实例的调用函数

时间:2018-02-07 05:45:35

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

我是编程新手,并对实例,类和静态变量进行了一些研究。最近,我试图简化我的项目代码,以帮助我在Python中学习更多。在这个特定的例子中,没有双关语,我希望能够调用somefoo()函数,该函数将根据条件为 init 实例变量1和2分配参数。根据我的理解,为了调用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()

1 个答案:

答案 0 :(得分:0)

首先,我甚至不知道您是否已经检查您的代码,然后将其发布到此处寻求帮助,因为它确实存在问题。有很多语法错误。这就是它应该是......

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未绑定方法,可以在没有自我对象引用的情况下使用。请务必仔细研究它们以及它们的工作原理,因为它们可以帮助您更灵活地解决问题。