使用代码示例理解Python中的“self”

时间:2013-09-06 05:21:57

标签: python

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_atm函数基本上说while crisis = true yield $100?仍然不确定self正在做什么。

另外,为什么x=bank()之后会出现冒号?

4 个答案:

答案 0 :(得分:0)

x = bank():

是不正确的代码,在运行代码时显然会出错

这里回答了''self''的用法:

Explaining the python 'self' variable to a beginner

正好在你从中获取代码的同一个问题。

答案 1 :(得分: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,

This 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?

不,只有在危机是错误的情况下才会产生,not。为了便于理解,if crisis意味着如果crisis不是假的,那么就这样做。现在,你有一个否定,所以这样做,如果它是假的。

答案 2 :(得分:0)

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

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

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

函数前面的行将crisis定义为False。此处crisis是内部变量或属性,默认情况下值为False。这对回答您的下一个问题非常重要:

  

所以,自crisis = False以来,create_atm函数基本上说crisis = true会产生100美元吗?

while语句仅在测试条件为True时执行。在这种情况下,条件为not self.crisis,与self.crisis中的条件相反。因此,您需要查看此crisisBank中看到的self的值,并否定该值。

如果self.crisisTrue,那么not self.crisis将为False,而while循环甚至不会执行。

我想你可以说self是传递给函数的参数,以便它可以访问自己的变量。这样,一个Bank可以在crisis,而另一个则不在。{/ p>

答案 3 :(得分:0)

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

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

所以“运气”被分配了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()