【发布时间】:2019-03-15 13:14:42
【问题描述】:
我在 Python 3 中使用嵌套类来“记账”。类结构(高度简化)如下所示:
class BookKeeping:
class ItemA:
count = 0
item_list = []
@classmethod
def add(cls, item_a):
cls.count += 1
cls.item_list.append(item_a)
class ItemB:
count = 0
item_dict = {}
...
这个类可以方便地跟踪和访问我正在建模的系统的一些“全局”属性。拥有嵌套类允许清晰的命名空间。例如,在任何模块中我都可以... import BookKeeping as BK 并检查有多少ItemB 对象(BK.ItemB.count)。
在我的程序中的某个时刻,我想“重置”所有类属性,即我想再次将 BookKeeping.ItemA.count 设置为 0 并清空列表和字典等。
显然,我可以添加一个顶级类方法,例如 BookKeeping.reset(),它会“手动”重置所有值,例如:
class BookKeeping:
@classmethod
def reset(cls):
cls.ItemA.count = 0
cls.ItemA.item_list = []
cls.ItemB.count = 0
...
但是,这对我来说似乎是一种容易出错的方法,它涉及到这个类的“维护”(我可能忘记重置一些属性)。请注意,我的真实课程比我提供的示例更复杂。
在运行时将所有类属性重置为其原始状态的最简单方法是什么?
【问题讨论】:
-
你能不能有一个单独的类(例如
BookKeepingSession或其他东西)将这些值保存为 instance 属性而不是 class 属性?然后你可以在每次你想做一些不相关的BookKeeping时创建一个新的BookKeepingSession。
标签: python python-3.x class oop nested