Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.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 在类中使用namedtuple_Python_Python 3.x_Magic Methods - Fatal编程技术网

Python 在类中使用namedtuple

Python 在类中使用namedtuple,python,python-3.x,magic-methods,Python,Python 3.x,Magic Methods,我正在练习O'Reily的《流畅Python》一书中的一段代码 代码如下所示: import collections Card= collections.namedtuple('Card',['rank','suit']); class FrenchDeck: ranks=[str(n) for n in range (2,11)]+ list('JQKA') suits= 'spades diamonds clubs hearts'.spli

我正在练习O'Reily的《流畅Python》一书中的一段代码

代码如下所示:

import collections

    Card= collections.namedtuple('Card',['rank','suit']);

    class FrenchDeck:
        ranks=[str(n) for n in range (2,11)]+ list('JQKA')
        suits= 'spades diamonds clubs hearts'.split()

        def __init__(self):
            self._cards= [Card(rank,suit)   for rank in self.ranks
                                            for suit in self.suits]
        def __len__(self):
            return len(self._cards)

        def __getitem__(self,position):
            return self._cards[position]
我可以看到namedtuple的特性是如何被用来将等级中的每个值分配给所有套装的

作为我自己的实践之一,我想寻求关于在这个范例中分配值的帮助。具体地说,在这个片段中,不是给一个学生四个等级,而是如何使用namedtuple特性为一个学生分配他们各自的唯一等级?(例如John-89、Jay-98、Joe-87、Joseph-91)。我从书中的样本中反刍出来的方式仍然会给每个学生分配所有的分数。非常感谢您的关注和帮助

Student= collections.namedtuple('Student',['name','grade'])

studentname=["John","Jay","Joe","Joseph"]

class grade: 
    names= studentname
    grades=[89,98,87,91]

    def __init__(self):
        self._stud=[
        Student(name,grade) for name in self.names 
                            for grade in self.grades ]  

    def __len__(self):
        return len(self._stud)

    def __getitem__(self,position):
        return self._stud[position]

这实际上与命名元组没有任何关系。使用这些卡,您使用
等级
套装
产品的每个元素创建了一个新的
实例

对于
grade
,您希望使用压缩
名称
成绩
的结果中的每个元素创建一个新的
学生
实例

def __init__(self):
    self._stud=[Student(name,grade) 
                for name, grade in zip(self.names, self.grades)]

这实际上与命名元组没有任何关系。使用这些卡,您使用
等级
套装
产品的每个元素创建了一个新的
实例

对于
grade
,您希望使用压缩
名称
成绩
的结果中的每个元素创建一个新的
学生
实例

def __init__(self):
    self._stud=[Student(name,grade) 
                for name, grade in zip(self.names, self.grades)]

在书中的代码中,每件西装都有每一个价值——它是西装和价值的笛卡尔乘积。在代码中,您只需要从学生到年级的一对一映射。这通常是通过以下方式完成的。您可以使用
zip(self.names,self.grades)
,这将为您提供相应的对。然后,您可以使用

self._stud=[Student(n, g) for n, g in zip(self.names, self.grades)]
你也可以让你的班级不依赖于全球学生,并用类似以下的方式记录学生名单和成绩:

import collections

Student = collections.namedtuple('Student',['name','grade'])

studentname = ["John","Jay","Joe","Joseph"]
grades = [89,98,87,91]

class Grades: 
    def __init__(self, names, grades):
        self._stud = [Student(n, g) for n, g in zip(names, grades)]

    def __len__(self):
        return len(self._stud)

    def __getitem__(self,position):
        return self._stud[position]

g = Grades(studentname, grades)
g.\u螺栓将为:

[
  Student(name='John', grade=89),
  Student(name='Jay', grade=98),
  Student(name='Joe', grade=87),
  Student(name='Joseph', grade=91)
]

在书中的代码中,每件西装都有每一个价值——它是西装和价值的笛卡尔乘积。在代码中,您只需要从学生到年级的一对一映射。这通常是通过以下方式完成的。您可以使用
zip(self.names,self.grades)
,这将为您提供相应的对。然后,您可以使用

self._stud=[Student(n, g) for n, g in zip(self.names, self.grades)]
你也可以让你的班级不依赖于全球学生,并用类似以下的方式记录学生名单和成绩:

import collections

Student = collections.namedtuple('Student',['name','grade'])

studentname = ["John","Jay","Joe","Joseph"]
grades = [89,98,87,91]

class Grades: 
    def __init__(self, names, grades):
        self._stud = [Student(n, g) for n, g in zip(names, grades)]

    def __len__(self):
        return len(self._stud)

    def __getitem__(self,position):
        return self._stud[position]

g = Grades(studentname, grades)
g.\u螺栓将为:

[
  Student(name='John', grade=89),
  Student(name='Jay', grade=98),
  Student(name='Joe', grade=87),
  Student(name='Joseph', grade=91)
]
[学生(姓名,成绩)代表姓名,zip中的成绩(姓名,成绩)]
或者你可以迭代索引并抓取
姓名[i]
成绩[i]
[学生(姓名,成绩)代表姓名,zip中的成绩(姓名,成绩)]
或者你可以迭代索引并抓取
姓名[i]
成绩[i]