我现在正在学习python并遇到了这段代码:
class Simple:
def __init__(self, str):
print("Inside the Simple constructor")
self.s = str
# Two methods:
def show(self):
print(self.s)
def showMsg(self, msg):
print(msg + ':',
self.show())
我在python shell中玩它并执行以下操作:
x = Simple("A constructor argument")
x.show()
输出:
A constructor argument
这对我来说很有意义,但是我输入了:
x.showMsg("A message")
哪个输出:
A constructor argument
A Message:None
这是我感到困惑的地方。为什么调用showMsg()中的self.show()会导致"无"当x.Show()导致"构造函数参数"?我认为self是一个占位符,直到创建了一个类的实例,这意味着在这种情况下self.show()将等同于x.show()?
对此的任何帮助都将非常感激。
答案 0 :(得分:0)
养成使用return
函数的习惯。默认情况下,没有return
语句的函数返回None
。
以下是如何重写程序的示例:
class Simple:
def __init__(self, str):
self.s = str
# Two methods:
def show(self):
return self.s
def showMsg(self, msg):
return msg + ': ' + self.show()
x = Simple("A constructor argument")
print(x.show())
# A constructor argument
print(x.showMsg('A message'))
# A message: A constructor argument
虽然您可以在课程中使用print
,但最好让您的班级处理逻辑并灵活处理您对结果的处理(打印它们,将它们存储在列表中,通过他们到另一个功能等)。
答案 1 :(得分:0)
类中的show()
方法只是打印存储的消息,但showMsg
试图通过调用{msg
将某些show
与存储的消息联系起来但是,由于show()不会返回任何内容,因此会显示{1}}方法,或者只有那样,它会像这样得到cat,您必须将方法更改为:
def show(self):
return self.s
或
def show(self):
print(self.s)
return self.s
在第二种情况下,您将保留两种情况的功能,但这是不好的做法