Python:类中的子属性

Python:类中的子属性,python,class,Python,Class,这可能是个愚蠢的问题,但我被困在这里了。在Python中,我创建了一个类匹配,带有一些属性,如my_Match.goals、my_Match.yellow_cards等。 我希望每场比赛都有一些相同的属性,但只限于比赛的上半场。 理想情况下,我的第一个想法是一种子属性,比如 my_match.half_time.goals 但这当然行不通 我的问题是:对于这样的需求,什么样的数据结构是最好的,我将如何实现它?我认为子类不是一个好主意,因为我希望同一个实例能够描述一半时间和全部时间。 谢谢大家!

这可能是个愚蠢的问题,但我被困在这里了。在Python中,我创建了一个类匹配,带有一些属性,如my_Match.goals、my_Match.yellow_cards等。 我希望每场比赛都有一些相同的属性,但只限于比赛的上半场。 理想情况下,我的第一个想法是一种子属性,比如

my_match.half_time.goals
但这当然行不通

我的问题是:对于这样的需求,什么样的数据结构是最好的,我将如何实现它?我认为子类不是一个好主意,因为我希望同一个实例能够描述一半时间和全部时间。
谢谢大家!

为了避免使用或创建另一个类,可以使用
namedtuples
对象。可以使用类似对象的变量延迟或标准元组语法引用命名元组实例

from collections import namedtuple
HalfTime = namedtuple('Halftime', 'goals yellow_cards')
my_match.half_time = HalfTime(4, 5)
my_match.half_time.goals
>>> 4
my_match.half_time.yellow_cards
>>> 5
如果你想更新你的值

my_match.half_time = my_match.half_time._replace(goals=10)

您所描述的是一组统计数据,并为比赛的不同阶段维护单独的统计数据集

我将使用一个单独的统计数据类来实现这一点,并在比赛的不同阶段拥有该类的多个实例,包括一个累积整个比赛统计数据的实例。也许是这样的:

class Statistics(object):
    def __init__(self):
        self.__goals = 0
        self.__yellow_cards =0
    def getGoals(self): return self.__goals
    def addGoal(self): self.__goals += 1
    …

class AccumulatedStatistics(object):
    def __init__(self, *statistics):
        self.__statistics = list(statistics)
    def getGoals(self):
        return reduce(lambda a,b:a.getGoals() + b.getGoals(), statistics)
    …

class Match(object):
    def __init__(self):
        self.quarterStats = [Statistics(), Statistics(), Statistics(), Statistics()]
        self.halfStats = [
            AccumulatedStatistics(self.quarterStats[0], self.quarterStats[1]), 
            AccumulatedStatistics(self.quarterStats[2], self.quarterStats[3]),
        ]
        self.matchStats = AccumulatedStatistics(*self.quarterStats)

这太宽泛了,无法回答。这是一个选项。。。但是,如果OP希望在创建后更新这些值(假设他们甚至在创建时知道这些值),那么语法就不是很直观,也不是很有效……谢谢,这非常适合!非常感谢。我必须使用这个类来读取值,因此对于这种情况,“namedtuple”就足够了。