-4
class Bank(): # let's create a bank, building ATMs
    crisis = False
    def create_atm(self):
        while not self.crisis:
            yield "$100"
  x=bank():

我是 python 的新手(和一般的编码),我正试图绕过self. 我不知道这是否是尝试学习的最佳示例self,但我不明白这条线while not self.crisis: yield "$100"。所以,既然功能基本上是这么说crisis = False的, 还是不确定在做什么。create_atmwhile crisis = true yield $100?self

另外,为什么后面有冒号x=bank()

4

4 回答 4

0

I'm new to python (and coding in general) and I'm trying to wrap my head around self. I don't know if this is the best example to try to learn self,

如评论中所述,这篇SO 文章很好地解释了“自我”。请通读。

Also, why is there a colon after x=bank()?

这是不正确的,不仅仅是因为冒号。你也应该使用x = Bank()(注意大写),并且这个声明应该在你代码中其他地方的类之外,就像主例程一样。

So, since crisis = False so does the create_atm function basically say while crisis = true yield $100?

不,只有当危机为 False 时才会产生,因此not. 要容易理解,if crisis就意味着如果crisis不是假的,那就做这个做那个。现在,你在那里有一个否定,所以如果它是假的,那么做这个和那个。

于 2013-09-06T05:39:27.053 回答
0
x = bank():

是不正确的代码,并且在运行代码时显然会给您一个错误

这里回答了“自我”的用法:

向初学者解释 python 'self' 变量

与您从中获取代码的问题完全相同。

于 2013-09-06T05:24:53.660 回答
0

就最后一个冒号而言,我不确定为什么x = bank():会这样写。正如已经建议的那样,这可能是一个错误。

在例子中,如果x = Bank()被执行,xBank类的一个实例,或者是一个Bank对象。该对象具有下面定义的函数的副本,所有Bank对象都应具有该副本:

def create_atm(self):
    while not self.crisis:
        yield "$100"

函数之前的行定义crisis为 being False。这crisis是一个内部变量或默认具有 value的属性False。这对于回答您的下一个问题很重要:

crisis = False那么,既然create_atm函数基本上是说 while crisis = trueyield $100 呢?

while只有当测试的条件是 时才会执行语句True。在这种情况下,条件是not self.crisis,与 in 中的任何内容相反self.crisis。因此,您需要查看crisisthisBank在其中看到的值self,然后否定它。

如果self.crisis是,True那么not self.crisis将是False并且while循环甚至不会执行。

我想您可以说self是传递给函数的参数,以便它可以访问自己的变量。这样,一个人Bank可能在,crisis而另一个人不在。

于 2013-09-06T05:50:10.000 回答
0

一点点阅读 OOP 将有助于了解自我。如果你注意到 self 是第一个参数。它不必是 self 它只是用于第一个参数的传统名称。它是对实例化对象的引用——“运气”。

现在我们可以分配和使用封装在该对象中并且实际携带的变量。因此,如果我们有同一个类的不同实例,它们将在 self.sum 中具有单独的变量和单独的值。这个初始化函数很特别。这称为构造函数。

所以“luck”被分配到Bank,并创建了一个名为“luck”的对象,它是Bank的一个实例。在创建该对象时,会调用 init,并使用对 self 的引用和变量 0 调用 init。

我希望这会有所帮助。

#!/usr/bin/env python
# encoding: utf-8

class Bank(): # let's create a bank, building ATMs

    def __init__(self, sum):
        self.sum = sum

    def create_atm(self):
        if self:
           self.sum = 100
        return self.sum

luck = Bank(0)

print luck.create_atm()
于 2013-09-06T06:09:40.177 回答