【发布时间】:2018-09-16 00:58:39
【问题描述】:
我正在为GMAIL API 编写一个包装器。在这个包装器中,我试图在“主类”中包含子属性,因此它更接近于以下内容:
以前,我使用的方法如下:
class Foo:
def __init__(self, ...):
# add some attributes
def get_method(self, ...):
return some_stuff
这让我可以做foo.get_method(...)。为了遵循 GMAIL API,我尝试这样做:
class Foo:
def __init__(self, ...):
# add some attributes
@property
def method(self):
class _Method:
@staticmethod
def get(self, ...):
return some_stuff
return _Method()
这让我可以做到foo.method.get(...)。上面有一些问题,它每次都重新定义类,我必须在每个方法上方添加@staticmethod作为它的一部分。我确实意识到我可以在外部类级别创建类,并为每个隐藏变量设置一个隐藏变量,然后 .method 返回或创建,但这似乎是太多的解决方法。
tldr:是否可以将传递给内部类的实例作为self作为外部类的实例(我不希望必须传递外部类的属性到每个内部类)。
【问题讨论】:
-
你的意思是“使用类定义,以便所有函数都被命名空间”?还有什么是外部类?你的问题不清楚。
-
这怎么不清楚?命名空间 = 所有函数都包含在类中,因此我不会污染模块的全局命名空间 - 如果我确实有
_name,我仍然不喜欢拥有那么多函数。 -
不清楚,因为我不明白你想做什么/完成什么。我能进一步说的唯一一件事是,如果它更容易理解,你可能会得到更好的答案......
-
我清楚地概述了我想要什么(根据我的意愿),我尝试过什么,然后是最后的问题?还有什么更清楚的吗?
-
好吧,更具体地说,将函数放在一个类中只是为了将它们放在一个命名空间中是不寻常的(而且可能是不必要的)——但如果这样做了,就不会有
self类涉及的实例,只是类名本身。因此不清楚你在说什么self。您还没有定义外部类是什么,也没有定义它在这一切中扮演的目的或角色。
标签: python library-design