我是python的新手,我试图了解self是如何工作的。当我来自JavaScript时,我认为它与此相似。如果我错了,请纠正我。在此期间,我编写了以下代码:
class Restaurant(object):
bankrupt = False
def open_branch(self):
if not self.bankrupt:
print("branch opened")
x = Restaurant()
y = Restaurant()
y.bankrupt = True
print(y.open_branch())
print(x.open_branch())
并获得输出:
None
branch opened
None
当我两次调用open_branch()时。它不应打印三次。我认为它应该打印,
branch opened // for first call
None // for 2nd call
答案 0 :(得分:3)
最后两个打印语句仅打印返回的方法的结果:
print(y.open_branch())
print(x.open_branch())
由于默认情况下,如果您未明确指定return语句,则python返回None
,并且您两次调用方法,因此,预计会看到两个None
语句。
如果调用不打印的方法,则会看到一条单打印的消息。
y.open_branch()
x.open_branch()
您可以通过在方法中添加return语句并像现在一样在外部进行打印来改进代码。像
class Restaurant(object):
bankrupt = False
def open_branch(self):
if not self.bankrupt:
return "branch opened"
return "branch closed"
x = Restaurant()
y = Restaurant()
y.bankrupt = True
print(y.open_branch())
# output:'branch closed'
print(x.open_branch())
# output: 'branch opened'
答案 1 :(得分:2)
好的,您有以下代码:
class Restaurant(object):
bankrupt = False
def open_branch(self):
if not self.bankrupt:
print("branch opened")
x = Restaurant()
y = Restaurant()
在这里,您有两个类型为“餐厅”的对象。
y.bankrupt = True
您在此处更改了存储在变量bankrupt
中的对象的属性y
print(y.open_branch())
这将输出
None
仅;为什么?首先,您正在调用函数y.open_branch()
,但是此函数不会输出任何内容,因为属性bankrupt
为true,因此if not self.bankrupt
的值为false,因此不会执行print语句。但是,函数open_branch()
也没有返回任何内容(大约没有return true
语句。因此print(y.open_branch())
等于print(None)
,它将输出None
。
print(x.open_branch())
对于x,属性bankrupt
为假,因此if not self.bankrupt
为真,并且打印语句print("branch opened")
将被求值。之后,将输出None
,其原因与None
得到print(y.open_branch())
的原因相同。
答案 2 :(得分:1)
您正在做的是在print
的返回值上调用open_branch
。
因此,当您看到它打印None
时,就会看到print(x.open_branch()
和print(y.open_branch()
的结果。
当您看到branch opened
时,这就是内部 open_branch
打印的结果。
尝试一下:
class Restaurant(object):
bankrupt = False
def open_branch(self):
result = ""
if self.bankrupt:
result = "Restaurant is bankrupt"
else:
result = "Branch opened"
return result
x = Restaurant()
y = Restaurant()
y.bankrupt = True
print(y.open_branch())
print(x.open_branch())
答案 3 :(得分:1)
有些事情在这里给您带来问题:
您的open_branch
函数未返回任何内容,因此,当您调用print(self.open_branch(x))
时,它正在打印None
,这是Python中所有函数默认返回的值,如果没有return
语句。您可以通过替换
if not self.bankrupt:
print("branch opened")
使用
if not self.bankrupt:
return "branch opened"
您要调用print
三次,这就是为什么您要在控制台上打印三行的原因(尽管如果您将函数中的print
替换为{我在上面详细介绍过的return
语句。
您应该在else
子句下放置if
语句,以便它返回有用的内容(如果是None
,则返回self.bankrupt == True
),您可以告诉分支是否已打开。我建议像这样:
if not self.bankrupt:
return "branch opened"
else:
return "Restaurant is bankrupt, branch could not be opened"