防止用户在Python中创建某些类的对象

时间:2018-11-02 09:53:39

标签: python

我正在为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对象不应该由用户创建,而应该对其进行操作?

2 个答案:

答案 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中,没有任何“私有”的东西,而不必跳过一堆箍。您能做的最好的事情就是遵守约定并很好地评论课堂。