python – 在类字段中存储类的所有实例是不是很糟糕?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 在类字段中存储类的所有实例是不是很糟糕?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2049字,纯文字阅读大概需要3分钟。
内容图文
我想知道在做这样的事情时是否有任何错误(从OOP的角度来看):
class Foobar:
foobars = {}
def __init__(self, name, something):
self.name = name
self.something = something
Foobar.foobars[name] = self
Foobar('first', 42)
Foobar('second', 77)
for name in Foobar.foobars:
print name, Foobar.foobars[name]
编辑:这是我正在使用的实际代码片段
from threading import Event
class Task:
ADDED, WAITING_FOR_DEPS, READY, IN_EXECUTION, DONE = range(5)
tasks = {}
def __init__(self, name, dep_names, job, ins, outs, uptodate, where):
self.name = name
self.dep_names = [dep_names] if isinstance(dep_names, str) else dep_names
self.job = job
self.where = where
self.done = Event()
self.status = Task.ADDED
self.jobs = []
# other stuff...
Task.tasks[name] = self
def set_done(self):
self.done.set()
self.status = Task.DONE
def wait_for_deps(self):
self.status = Task.WAITING_FOR_DEPS
for dep_name in self.dep_names:
Task.tasks[dep_name].done.wait()
self.status = Task.READY
def add_jobs_to_queues(self):
jobs = self.jobs
# a lot of stuff I trimmed here
for w in self.where: Queue.queues[w].put(jobs)
self.status = Task.IN_EXECUTION
def wait_for_jobs(self):
for j in self.jobs: j.wait()
#[...]
正如您所看到的,我需要访问包含所有实例的字典
wait_for_deps方法.拥有一个全局变量会更有意义吗?
而不是类字段?我可能在这里使用了错误的方法,也许就是这样
东西甚至不应该在一个方法中,但它对我有意义(我是OOP的新手)
解决方法:
是.这不好.它将实例与实例集合混淆.
收藏是一回事.
收集的实例是无关的.
此外,更新的类级变量会使我们中的一些人感到困惑.是的,我们最终可以推断出正在发生的事情,但标准期望?是状态变化适用于对象,而不是类.
class Foobar_Collection( dict ):
def __init__( self, *arg, **kw ):
super( Foobar_Collection, self ).__init__( *arg, **kw ):
def foobar( self, *arg, **kw ):
fb= Foobar( *arg, **kw )
self[fb.name]= fb
return fb
class Foobar( object ):
def __init__( self, name, something )
self.name= name
self.something= something
fc= Foobar_Collection()
fc.foobar( 'first', 42 )
fc.foobar( 'second', 77 )
for name in fc:
print name, fc[name]
这更典型.
在您的示例中,wait_for_deps只是任务集合的一种方法,而不是单个任务.你不需要全局变量.
你需要重构.
内容总结
以上是互联网集市为您收集整理的python – 在类字段中存储类的所有实例是不是很糟糕?全部内容,希望文章能够帮你解决python – 在类字段中存储类的所有实例是不是很糟糕?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。