【问题标题】:How to print the for loop in a class object?如何在类对象中打印 for 循环?
【发布时间】:2020-12-28 18:49:54
【问题描述】:

您好,我正在学习 OOP 和类,但对类的实现有些困惑。下面,我有两组相同的代码,在定义类中的方法后,我尝试运行它们的方式略有不同。我只是不确定为什么第一个代码运行而第二个代码没有运行,因为我觉得我在做同样的事情?此外,在循环完成后运行第一个代码时,我得到“无”,任何想法为什么会发生这种情况?除此之外,我知道您可以使用一些迭代器,但只是想知道下面用于循环内容的方法是否不正确或有问题?



class i:
    def __init__(self,number):
        self.number=number
    def fun(self):
        for i in range(self.number):
            print(i)
            
            
kj=i(9)
print(kj.fun())

class i:
    def __init__(self,number):
        self.number=number
    def fun(self):
        for i in range(self.number):
            print(i)
            
            
kj=i()
print(kj.fun(9))

【问题讨论】:

  • kj.fun() 什么也不返回,这就是为什么打印它的结果会给出None。你只在那个函数中打印东西,你永远不会返回任何东西。至于循环你正在做的方式是“正确的”,如果没有更多的上下文,这是不可能说的。无论如何,您应该按照规则在每个帖子中问一个问题。
  • 你的第二个 sn-p 不正确,因为 i.__init__ 需要一个 number 参数,但是当你实例化 i() 时你没有传入一个参数。这也是不正确的,因为您向kj.fun 传递了一个附加参数,而它预计不会看到多个参数。两个 sn-ps 最后都打印None,因为您正在打印kj.fun(9) 返回的值,这将是None,因为fun 方法没有显式返回任何内容。

标签: python class oop object


【解决方案1】:

在 python 中,类名通常大写。这避免了在此处定义具有相同名称的类是索引变量的问题。

另外,如果你想打印一个方法的结果,那么让方法返回一个值,而不是让它打印每个值。

把这些概念放在一起,我会改变

class i:
    def __init__(self, number):
        self.number = number
    def fun(self):
        for i in range(self.number):
            print(i)
            
            
kj=i(9)
print(kj.fun())

class I:
    def __init__(self, number):
        self.number = number

    def fun(self, number=None):
        if not number:
            number = self.number
        return list(range(number))                   
            
kj = I(9)
numbers = kj.fun()

# if you want to print the list
print(numbers)

# if you want to print individual values
print(*numbers)

# if you want to print one number per line
print('\n'.join(numbers))

【讨论】:

    【解决方案2】:

    以下代码使用类型提示更好地说明了语法:

    class i:
        def __init__(self,number: int) -> "i":
            self.number=number
    
        def fun(self) -> None:
            for i in range(self.number):
                print(f"fun - i")
                
                
    kj=i(9)
    print(kj.fun())
    

    输出

    -> fun - 0
    -> fun - 1
    -> fun - 2
    -> fun - 3
    -> fun - 4
    -> fun - 5
    -> fun - 6
    -> fun - 7
    -> fun - 8
    -> None
    

    我们看到输出 1 - 8 来自函数内部 而 None 是因为 fun() 方法默认返回 None。

    第二个代码会有如下错误 TypeError: __init__() missing 1 required positional argument: 'number' 因为要初始化类,它需要输入数字。您要在“有趣”方法调用上传递参数这一事实意味着期望类初始化时的数字是多余的;

    可以改为:

    class i:
        def __init__(self):
            pass
    
        def fun(self, number: int):
            for i in range(number):
                print(i)
    
    
    kj = i()
    print(kj.fun(9))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多