[英]How to fix “Class name is not defined” error in Python?
晚上好,我的代码遇到了一些麻烦。 我的目标是将数据输入到类中。 所以我有p1 = Pitch(“ CH”,“ S”)。 从这里开始,我要运行一个函数,该函数打印带有输入该数据的语句的语句,并使用另一个函数在print语句中查找平均速度。 我的不好是,如果这在很大程度上没有意义,但是让我发布我到目前为止的代码,看看它是否可以提供更好的视觉效果。
import csv
fh = open('pitches.csv')
spreadsheet = csv.DictReader(fh)
startspeed = []
class Pitch:
def __init__(self, name, result):
fh = open('pitches.csv')
self.spreadsheet = csv.DictReader(fh)
self.name = name
self.result = result
def avg_start_speed(self):
for row in spreadsheet:
if row['pitch_type'] == str(self.name) and row['type'] == str(self.result):
startspeed.append(row['start_speed'])
return sum(startspeed) / len(startspeed)
def myfunc(self):
for row in spreadsheet:
if row['pitch_type'] == self.name:
print("The average speed of a " + self.result + " for a "
+ self.name + " is " + str(self.avg_start_speed()))
p1 = Pitch("CH", "S")
p1.myfunc()
我收到此错误
NameError:名称“ avg_start_speed”未定义
我不确定如何解决。 感谢您提前提出所有建议。
CSV样本:
start_speed end_speed type pitch_type
92.9 84.1 S FF
92.8 84.1 S FF
94.1 85.2 S FF
91 84 B FF
75.4 69.6 B CU
92.9 84.8 S CH
93.3 85.3 B FF
89.3 82.4 X FC
92.1 85 S CH
您的代码中的一些问题。
您在def avg_start_speed():
中缺少一个self
变量def avg_start_speed():
假设您想将其用作类方法。 (我也看到您也在函数定义中使用self
)。 因此它将是def avg_start_speed(self):
您还想在myfunc
使用self
调用avg_start_speed()
函数self.avg_start_speed()
您还可以在课程外定义spreadsheet
。 为什么不在类内部(可能在__init__
定义它并使用它呢?
您也不会在avg_start_speed()
函数中声明startspeed
变量
永远记住,对于类方法,第一个参数始终是self
,您可以使用class.func()
在类中的其他类方法中调用它们
使这些更改生效,代码看起来像
import csv
class Pitch:
def __init__(self, name, result, spreadsheet):
self.spreadsheet = spreadsheet
self.name = name
self.result = result
def avg_start_speed(self):
#Calculate average speed and return
startspeed = []
for row in self.spreadsheet:
if row['pitch_type'] == self.name and row['type'] == self.result:
startspeed.append(float(row['start_speed']))
return sum(startspeed) / len(startspeed)
def myfunc(self):
#Call avg_start_speed here and print it using string.format
avg_start_speed = self.avg_start_speed()
print("The average speed of a {} for a {} is {}".format(self.result,self.name ,
avg_start_speed))
#Open pitches.csv outside the class
with open('pitches.csv') as fh:
#Open the csv as a dict and pass it as an argument to Pitch
spreadsheet = csv.DictReader(fh)
p1 = Pitch("CH", "S", spreadsheet)
p1.myfunc()
因此,如果pitches.csv
看起来像
start_speed,end_speed,type,pitch_type
92.9,84.1,S,CH
94.1,85.2,S,CH
输出将是
The average speed of a S for a CH is 93.5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.