我正在为Twitter创建包装Python API
例如:
search_tweets(**kwargs)
此API返回Tweet对象。 Tweet类看起来像:
class Tweet:
def __init__(self, tweet, favorites, impressions, engagements, **kwargs):
""" Create a new Tweet Object with field values """
self.impressions = impressions
self.favorites = favorites
self.tweet = tweet
self.engagements = engagements
vars(self).update(kwargs)
def retweet():
""" Retweet this tweet """
Tweet对象将向用户公开,因为Tweet对象将由search_tweets API返回,并且用户可以对此对象调用retweet之类的方法,但是我不希望用户明确创建此对象。
如何表示Tweet对象不应该由用户创建,而应该对其进行操作?
答案 0 :(得分:1)
您可以使Tweet
类在该函数中是本地的,例如:
def search_tweets(**kwargs):
class Tweet:
...
因此,用户可以对从retweet()
函数返回的对象调用search_tweets()
和其他方法,但是由于缺少易于理解的名称,因此无法手动轻松创建Tweet
对象。
但是这种方法的缺点是,将很难从其他API函数创建Tweet
。
答案 1 :(得分:1)
您可以使用单个下划线约定(PEP documentation)。
_single_leading_underscore:“内部使用”指标较弱。例如。 from M import *不会导入名称以下划线开头的对象。
在Python中,没有任何“私有”的东西,而不必跳过一堆箍。您能做的最好的事情就是遵守约定并很好地评论课堂。