我正在寻找一种优雅的方法,使用一些嵌套的dicts和列表(即javascript样式的对象语法)在dict上使用属性访问来获取数据.
例如:
>>> d = {'a': 1, 'b': {'c': 2}, 'd': ["hi", {'foo': "bar"}]}
Run Code Online (Sandbox Code Playgroud)
应该可以通过这种方式访问:
>>> x = dict2obj(d)
>>> x.a
1
>>> x.b.c
2
>>> x.d[1].foo
bar
Run Code Online (Sandbox Code Playgroud)
我认为,如果没有递归,这是不可能的,但是什么是获得dicts的对象样式的好方法?
在考虑设计时,在哪些情况下使用class与dict是否有意义?优点和缺点也很有用.
例如,
class AlbumState:
""" AlbumState class, tracks photos shown, etc"""
def __init__ (self, album):
""" album for this object will track state"""
self.album = album
self.photos_shown = []
self.photos_notshown = range(album.size())
Run Code Online (Sandbox Code Playgroud)
与
albumstate['album'] = album
albumstate['photos_shown'] = []
albumstate['photos_notshown'] = range(album.size())
Run Code Online (Sandbox Code Playgroud) 我喜欢所有用于抓取网站的python库,我正在尝试使用BeautifulSoup和IMDB来获取乐趣.
当我来自Java时,我将一些Java实践合并到我的编程风格中.我正在尝试获取某个电影的信息,我可以创建一个Movie类,也可以只使用带有键属性的字典.
我的问题是,当一个类只包含数据而且几乎没有行为时,我应该只使用字典吗?在其他语言中创建类型将帮助您实施某些限制,并且由于类型检查IDE将帮助您编程,在python中并非总是这样,所以我该怎么办?
我是否应该只在有行为和数据的情况下创建一个类?或者创建一个电影类,即使它可能只是一个数据容器?
这一切都取决于你的模型,在这种特殊情况下,任何一个都很好,但我想知道什么是一个好的做法.
我已经使用 python 一段时间了,但我缺少一些东西。
导入模块时,如果模块包含类或仅包含定义,有什么区别吗?例如,我有以下两个模块:
def hello():
print("hello")
Run Code Online (Sandbox Code Playgroud)
或者
class Hello():
def hello():
print("hello")
Run Code Online (Sandbox Code Playgroud)
我从另一个模块导入它
import module_name
module_name.hello()
Run Code Online (Sandbox Code Playgroud)
或者
import module_name
Hello = module_name.Hello()
Hello.hello()
Run Code Online (Sandbox Code Playgroud)
代码有什么不同吗?
如果想并行执行怎么办?如果我只导入定义会有什么问题吗?