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()
之后会出现冒号?
答案 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()
,x
是Bank
类或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
中的条件相反。因此,您需要查看此crisis
在Bank
中看到的self
的值,并否定该值。
如果self.crisis
为True
,那么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()