为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

ABOUTYOU 2021-08-05 16:45:42
我正在为 twitter 创建一个包装器 Python API,例如:search_tweets(**kwargs)此 API 返回一个 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 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

您可以使用单下划线约定(PEP 文档)。

_single_leading_underscore:弱“内部使用”指标。例如 from M import * 不导入名称以下划线开头的对象。

Python 中没有什么是“私有的”,无需跳过一堆障碍。你能做的最好的事情就是遵循惯例并很好地评论课程。


查看完整回答
反对 回复 2021-08-05
?
烙印99

TA贡献1829条经验 获得超13个赞

您可以将Tweet类设为函数的本地类,例如:

def search_tweets(**kwargs):
    class Tweet:
        ...

因此,用户可以retweet()对从search_tweets()函数返回的对象调用和其他方法,但Tweet由于缺乏人类可读的名称,无法轻松地手动创建对象。但是这种方法的缺点是Tweet从其他 API 函数创建s也同样困难。


查看完整回答
反对 回复 2021-08-05
  • 2 回答
  • 0 关注
  • 217 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信