Python - 函数

时间:2018-03-11 14:53:50

标签: python python-3.x oop

我现在正在学习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()?

对此的任何帮助都将非常感激。

2 个答案:

答案 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

在第二种情况下,您将保留两种情况的功能,但这是不好的做法