【问题标题】:Python Object OrientedPython 面向对象
【发布时间】:2019-11-03 18:48:18
【问题描述】:

我在玩python中的面向对象编程时遇到了一个我以前没有遇到过的错误..:

class Main:
    def __init__(self, a , b):
        self.a = a
        self.b = b

    def even(self):
        start = self.a
        slut = self.b
        while start <= slut:
            if start % 2 == 0:
                yield start
            start += 1

    def odd(self):
        start = self.a
        slut = self.b
        while start <= slut:
            if start % 2 != 0:
                yield start
            start += 1

    def display():
        evens = list(num.even())
        odds = list(num.odd())
        print(f"{evens}'\n'{odds}")

num = Main(20, 50)

Main.display()

看看最后一个类方法,其中应该有一个“自我”作为程序工作的参数。这是为什么呢?我认为每个类方法都应该包含一个“自我”作为参数?该程序无法使用它

【问题讨论】:

    标签: python oop object parameters self


    【解决方案1】:

    应该有一个self 参数,如果它打算作为一个实例方法,如果你试图这样使用它,你会得到一个错误,即num.display()

    但是,您通过 调用它,而Main.display 只是返回函数本身,而不是method 的实例,因此它按原样工作。

    鉴于您在正文中使用了Main(即num)的特定实例,您应该将其替换为self

    def display(self):
        evens = list(self.even())
        odds = list(self.odd())
        print(f"{evens}'\n'{odds}")
    

    并调用它

    num.display()
    

    【讨论】: