Python:从 class 中的方法返回值

Python: Returning a value from a method within a class

我是新手,所以正在做婴儿学步。创建了一个简单的平均身高程序。

没有错误消息,但 return 值为: <函数 Students.total_heights 在 0x00000207DC119750>

我不需要使用此脚本创建 'class.methods',但我正在尝试这样做以了解其工作原理。

有两个问题。

  1. Material源码阅读更多?一直在浏览 'Whosebug' 关于我的问题。我见过类似的问题,但答案是从多年来一直这样做的人的角度出发的。很多沉重的术语。我已经编码 6 周了。努力工作,多读书。

  2. 该脚本包含一个 'main' 方法,该方法位于 'class' 结构之外。主要调用 class 结构中的方法。 class 中的方法可以正常工作。伟大的!我现在想要 'return' 该方法的输出,以便我可以在 main 方法中使用它。

谢谢。

class Students:

    def __init__(self, list_num):

        self.heights = list_num

    def convert_str_list(self):

        for n in range(0, len(self.heights)):
            self.heights[n] = float(self.heights[n])
            return self.heights
        print(f"Checking: changing str to float {self.heights}")


def main():

    student_heights = input("Input a list of student heights, in cms, with commas inbetween.").split(",")

    print(f"\n\t\tChecking: Student heights straight after removing commas "
          f"and converting to a str list: {student_heights}")

    str_list = Students(student_heights)
    str_list.convert_str_list()

    print(Students.total_heights)

main()

欢迎编码!

所以有几件事...

  • print(f"Checking: changing str to float {self.heights}") 永远不会 运行 因为在 for 循环中有一个 return 语句。 return 语句之后的任何内容都不会 运行.

我假设您想将字符串转换为每个高度的浮点数。有多种方法可以做到这一点。

在你的 for 循环中你可以使用这段代码

for n in range(0, len(self.heights)):
        self.heights[n] = float(self.heights[n])

这将修改您已经创建的列表,因此不需要 return 另一个列表

class Students:

    def __init__(self, list_num):
        # this is a field aka attribute of the Students object
        self.heights = list_num

    # this is a function (method) that belongs to the students object
    # this function will modify the heights list 
    def convert_str_list(self):

        for n in range(0, len(self.heights)):
            self.heights[n] = float(self.heights[n])


def main():

    student_heights = input(
        "Input a list of student heights, in cms, with commas inbetween.").split(",")

    print(f"\n\t\tChecking: Student heights straight after removing commas "
          f"and converting to a str list: {student_heights}")

    # here you are creating (instantiating) a new Student object
    # the list that you created will be assigned to the heights field
    str_list = Students(student_heights)

    # you are calling the convert_str_list() method on the a specific object (instance) namely the str_list student object
    str_list.convert_str_list()
    
    # we want to print the field of the student object
    print(str_list.heights)


main()

这里有一篇很好的文章,比我更好地描述了 OOP 范式 https://www.programiz.com/python-programming/object-oriented-programming

我假设您正在尝试将输入的字符串转换为列表,并希望将其作为一个函数。您提供的当前代码没有 运行,因为迭代还包括无效字符,如“[”、“]”和“,”。这是我猜你的代码的解决方案:

class Students:
    def __init__(self, heights:str):
        self.heights = heights
    def convert_str_list(self):
        total_heights = []
        for n in range(len(self.heights)):
            try:
                total_heights.append(float(self.heights[n]))
            except ValueError:
                continue
        self.heights = total_heights
        print(f"Checking: changing str to float {self.heights}")
        return self.heights


def main():
    student_heights = input("Input a list of student heights, in cms, with commas inbetween.").split(",")
    print(f"\n\t\tChecking: Student heights straight after removing commas "
          f"and converting to a str list: {student_heights}")
    str_list = Students(student_heights)
    str_list.convert_str_list()
    print(str_list.heights)
main()

确保不要忘记使用启动 class 时使用的同一个变量来检索其中的变量。您还可以使用 try catch 块来处理字符串中的各个字符,或者只使用内置函数 eval() 来获取带有浮点数的列表:

student_heights = eval(input("Input a list of student heights, in cms, with commas inbetween."))