Python:从 class 中的方法返回值
Python: Returning a value from a method within a class
我是新手,所以正在做婴儿学步。创建了一个简单的平均身高程序。
没有错误消息,但 return 值为:
<函数 Students.total_heights 在 0x00000207DC119750>
我不需要使用此脚本创建 'class.methods',但我正在尝试这样做以了解其工作原理。
有两个问题。
Material源码阅读更多?一直在浏览 'Whosebug' 关于我的问题。我见过类似的问题,但答案是从多年来一直这样做的人的角度出发的。很多沉重的术语。我已经编码 6 周了。努力工作,多读书。
该脚本包含一个 '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."))
我是新手,所以正在做婴儿学步。创建了一个简单的平均身高程序。
没有错误消息,但 return 值为: <函数 Students.total_heights 在 0x00000207DC119750>
我不需要使用此脚本创建 'class.methods',但我正在尝试这样做以了解其工作原理。
有两个问题。
Material源码阅读更多?一直在浏览 'Whosebug' 关于我的问题。我见过类似的问题,但答案是从多年来一直这样做的人的角度出发的。很多沉重的术语。我已经编码 6 周了。努力工作,多读书。
该脚本包含一个 '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."))