Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
再次使用python未绑定方法_Python_Class - Fatal编程技术网

再次使用python未绑定方法

再次使用python未绑定方法,python,class,Python,Class,这让我陷入了困境(对不起,我对python还是很陌生) 谢谢你的帮助 错误 MostFrequent()必须与一起调用 学生实例作为第一个参数 (却一无所获) 这个Student.MostFrequent()在末尾(最后一行)一直被调用,该def是类中的最后一个def someStudent = Student(someRow) 编辑命名约定 我的长代码 import csv class Student: sports = [] ftopics = [] stopics

这让我陷入了困境(对不起,我对python还是很陌生) 谢谢你的帮助

错误

MostFrequent()必须与一起调用 学生实例作为第一个参数 (却一无所获)

这个Student.MostFrequent()在末尾(最后一行)一直被调用,该def是类中的最后一个def

someStudent = Student(someRow)
编辑命名约定

我的长代码

import csv
class Student:
    sports = []
    ftopics = []
    stopics = []
    choice_list = []
    choice_dict = {}
    def __init__(self, row):
       self.lname, self.fname, self.ID, self.gender, self.sport, self.movie, self.movieyr, self.country, self.ftopic, self.stopic = row
       self.sports.append(self.sport)
       self.ftopics.append(self.ftopic)
       self.stopics.append(self.stopic)
    def print_information(self):
       return (self.lname, self.fname, self.ID, self.gender)
    def print_first(self):
       return (self.lname, self.fname, self.sport)
    def print_second(self):
        return (self.lname, self.fname, self.movie, self.movieyr)
    def print_third(self):
        return (self.lname, self.fname, self.country)
    def print_fourth(self):
        return (self.lname, self.fname, self.ftopic, self.stopic)
    def most_frequent(self):
        for choice in self.choice_list:
                self.choice_dict[choice] = self.choice_dict.get(choice, 0) + 1
        self.mostFrequent = sorted([(v, k) for k, v in self.choice_dict.items()], reverse=True)
        print self.mostFrequent

reader = csv.reader(open('new_mondy_csc_data_revise.csv'), delimiter=',', quotechar='"')
header = tuple(reader.next())
print "%-17s|%-10s|%-6s|%s" %header[:4]
print "-" * 45
students = list(map(Student, reader)) # read all remaining lines
for student in students:
    print "%-17s|%-10s|%-6s|%3s" % student.print_information()

print "%-17s|%-10s|%s" %(header[0],header[1],header[4])
print "-" * 45
for student in students:
    print "%-17s|%-10s|%s" %student.print_first()

print "%-17s|%-10s|%-16s|%s" %(header[0],header[1],header[5],header[6])
print "-" * 45
for student in students:
    print "%-17s|%-10s|%-16s|%s" % student.print_second()

print "%-17s|%-10s|%s" %(header[0],header[1],header[7])
print "-" * 45
for student in students:
    print "%-17s|%-10s|%s" %student.print_third()

print "%-17s|%-10s|%-15s|%s" %(header[0],header[1],header[8],header[9])
print "-" * 45
for student in students:
    print "%-17s|%-10s|%-16s|%s" % student.print_fourth()

k = len(students)    
# Printing all sports that are specified by students
for s in set(Student.sports): # class attribute
    print s, Student.sports.count(s), round(((float(Student.sports.count(s)) / k) *100),1)

# Printing sports that are not picked 
allsports = ['Basketball','Football','Other','Baseball','Handball','Soccer','Volleyball','I do not like sport']
allsports.sort()
for s in set(allsports) - set(Student.sports):
    print s, 0, '0%'
Student.choice_list = Student.sports
X = Student()
X.most_frequent()

#class Search(Student):
#    def __init__(self):
#        Student.__init__
使用
Student().MostFrequent()

编辑

注意使用类属性,这很危险。这里有一个例子:

>>> class Person:
...  name = None
...  hobbies = []
...  def __init__(self, name):
...   self.name = name
... 
>>> a = Person('marco')
>>> b = Person('francesco')
>>> a.hobbies.append('football')
>>> b.hobbies
['football']
>>> a.name
'marco'
>>> b.name
'francesco'
>>> a.name = 'mario'
>>> b.name
'francesco'
>>> a.name
'mario'
>>> 

正如您所见,我修改了marco的嗜好,francesco的嗜好也随之修改。

在您的类def中,方法定义

def MostFrequent(self,mostFrequent):
有一个额外的变量mostFrequent,您可能不希望它出现。尝试更改为:

def MostFrequent(self):

您很少对类定义调用方法(
Student

几乎总是创建类的实例

someStudent = Student(someRow)
然后调用实例(“对象”)上的方法,
someStudent

someStudent.MostFrequent()

首先阅读命名约定:

方法名称和实例变量

second您正在调用类
Student
上的
mostFrequest
,而不是它的实例。改为在实例上使用该方法:

student = Student(row)
student.MostFrequent()

MostFrequent表示您试图使用静态方法,而不是实例方法。所以您必须首先通过调用Student()创建实例,然后对其调用MostFrequent()


注:如果这不是某个神秘项目的一部分,我建议您遵循PEP 8,使用最常用的方法名。

首先,我建议将函数名改为小写

MostFrequent
用作静态方法会导致出现错误。为此,需要显式地传递
Student
的实例作为第一个参数

如果直接对
学生
的实例调用,该实例将作为第一个参数隐式传递


考虑使用
staticmethod
decorator静态使用函数。

您可能想要的是将
最常见的
定义为:


这是否适用于像:def uu init uuu(self,row)这样的构造函数?steve说如何从方法定义中删除最频繁的参数,但是您得到的错误与您不使用实例的事实有关class@TheMYYN:没有。也许我匆忙回答了这个问题,但他犯了那个错误,因为他调用了类上的方法,而不是对象。要在类上调用方法,有
classmethod
staticmethod
修饰符。查看文档了解它们的用法。这正是我在django validator字段中所需要的,我不想在该字段中创建validator类的实例,但
validators=[ValidatorClass().function\u name]
正是我需要做的!我想在这种情况下,这会抱怨错误的论点数量,还是没有?总是很高兴看到一个CS毕业生在一个嘶嘶适合
student = Student(row)
student.MostFrequent()
@classmethod
def most_frequent(cls):
    for choice in cls.choice_list:
        cls.choice_dict[choice] = cls.choice_dict.get(choice, 0) + 1
    cls.mostFrequent = sorted([(v, k) for k, v in cls.choice_dict.items()], reverse=True)
    return cls.mostFrequent