【问题标题】:Data structure inside an object in PythonPython中对象内部的数据结构
【发布时间】:2014-05-05 10:33:48
【问题描述】:

我知道你可以这样做,例如:

class Node(object):
   __slots__ = 'data', 'left', 'right'

   def __init__(self, data=None, left=None, right=None):
      self.data  = data
      self.left  = left
      self.right = right

但是我要怎么做才能得到,例如:

class Node(object):
   __slots__ = 'data', 'left', 'right'
   data.struct = 'hour', 'min', 'day'

   def __init__(self, data=None, left=None, right=None):
      self.data  = data
      self.left  = left
      self.right = right
      self.data.hour = hour
      self.data.min = min
      self.data.day = day

我知道语法不对,但希望你能明白。

【问题讨论】:

  • 请详细说明。你的问题真的不清楚。你说的是变量赋值吗?您是在谈论默认值吗?您是在谈论初始化方法吗?...请解释一下。可能有更多的代码。 :)
  • 好的,抱歉。我会编辑。
  • 没有名为小时、分钟和天的参数。如果它们存在,分配 self.data 将与分配 self.data.hour、self.data.min 和 self.data.day 相比是多余的。请修复伪代码并解释您的意图。
  • 对不起。如果我用伪代码来做这件事是因为我不知道如何正确地做。这就是我寻求帮助的原因。我认为这个想法很清楚:我想拥有和反对字段“数据”、“左”和“右”,并且我想在“数据”字段中拥有一些带有字段“小时”、“分钟”的结构和“天”。对不起,如果我没有正确解释自己,感谢您的耐心和帮助。

标签: python class object data-structures


【解决方案1】:

您需要为data 定义包含成员hours, min, day 的类。您可以使用它方便的工厂collections.namedtuple进行基本使用:

#!/usr/bin/env python

import collections

Time_tuple = collections.namedtuple("Time", ['hour', 'min', 'day'])


class Node(object):
    def __init__(self, time=(None, None, None)):
        self.time = Time_tuple(*time)

node = Node()
print repr(node.time.day)

other_node = Node((23, 50, 1))
print other_node.time.hour

请注意,这使您无法控制传递给构造函数的值是否有效。如果您想像这样添加检查,您应该编写自己的Time_tuple 类,如果数据不正确(例如小时为42),则提高ValueError

【讨论】:

  • 那行得通。非常感谢你。但还有一个问题:如何只更新一个字段?我的意思是,我做不到:self.time.dia = r。有什么线索吗?
  • 元组是不可变的,所以你不能只改变它的一部分。您可以创建新的元组并分配它。您可以解压缩元组:hour, min, day = node.time,更改一部分:day = new_day 并分配一个新的:node.time = Time_tuple(hour, min, day)。或者只是像我之前提到的那样,与成员一起编写自己的课程。
猜你喜欢
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-25
相关资源
最近更新 更多