我能将变量分成另一个类,但保持使用相同吗?

时间:2016-04-23 14:56:35

标签: python

我试图重写一个脚本而且我一直坚持让它易于使用。基本上它是一个汇编脚本(就像破坏的反向),你输入一些变量,如位置,位置是绝对的还是相对的,缩放,旋转,可见性,随机偏移等,以创建一个动画。第一个版本非常非用户友好,所以我试图从一开始就让它很好地工作。

我已经想到了我喜欢它的工作方式,而且我设法保持干净,但是有一个缺陷。正如您在下面所看到的,可以使用我不想要的SetGroup.frame[i].save()之类的内容(而且我不想在if name is None上对class SetGroup(object): def __init__(self, name=None, _frame_only=False): if name is None and not _frame_only: raise TypeError('name of group must be provided') self.selection = None self.origin = None self.start = None self.end = None self.offset = 0 self.distance = None self.random = 0 self.location = None self.rotation = None self.scale = None self.visibility = None if not _frame_only: self.frame = defaultdict(lambda: SetGroup(_frame_only=True)) def save(self): self.load() #do a bit of error checking here self.data[self.name] = {'ObjectSelection': self.selection, 'ObjectOrigin': self.origin, 'FrameStart': self.start, 'FrameEnd': self.end, 'FrameOffset': self.offset, 'FrameDistance': self.distance, 'FrameRandom': self.random, 'StartLocation': self.location, 'StartRotation': self.rotation, 'StartScale': self.scale, 'StartVisibility': self.visibility, 'ExtraFrames': self.frame} pm.fileInfo['AssemblyScript'] = StoreData().save(self.data) def load(self): try: self.data = StoreData().load(pm.fileInfo['AssemblyScript']) except KeyError: pm.fileInfo['AssemblyScript'] = StoreData().save({}) 进行检查班级)。

这是我的代码:

a = SetGroup('test')
a.location = ((0, 0, 0), True)
a.start = 0
a.end = 10
a.frame[5].location = ((10, 10, 10), False)
a.frame[5].scale = ((2, 1, 1), True)
a.save()

我喜欢它的工作方式是这样的:

location

除非有人能想出一种方式使其使用起来更友好,否则如何将rotationscalevisibilityclass _MovementInfo(object): def __init__(self, location=None, rotation=None, scale=None, visibility=None): self.location = location self.rotation = rotation self.scale = scale self.visibility = visibility def __repr__(self): return '_MovementInfo(location={x.location}, rotation={x.rotation}, scale={x.scale}, visibility={x.visibility}'.format(x=self) 分成另一个类并再次链接它们,以便它们仍然在类的核心级别工作,但也适用于帧字典?

编辑 - 让它工作到基本级别:

self.__dict__.update({k: v for k, v in _MovementInfo().__dict__.iteritems() if '__' not in k})
self.frame = defaultdict(_MovementInfo)

然后我在主类中使用它来合并字典:

class BankAccount
  private Customer cust;
  void TotalBalance() {  cust.Balance(); }
  void OwnersBalance() { print “finished”; }

class Customer
  private Account acc;
  void Balance() { acc.OwnersBalance(); }

1 个答案:

答案 0 :(得分:1)

我会改变这样的代码:

class SetGroup(_Movement):
    def __init__(self, name=None):
        if name is None:
            # ...
        super().__init__()
        # ...
        self.random = 0  # __init__ should end here

    # ...

但是你应该检查所有帧中的所有_MovementInfo_MovementInfo还是从它们继承(检查:isinstance(x, _MovementInfo)),但不是{{1 (检查:SetGroup)。

not isinstance(x, SetGroup)super()的缩写(您必须使用python2的最后一个选项),并且基本上是一个包含基类所有内容的对象,并允许您调用方法修改调用它的类。

或代码:

super(SetGroup, self)

我希望这有帮助,

CodenameLambda