使用我的 API 时使函数不可访问

我正在为我的网站开发 API,我会将 API 作为 Python 的包发布。如何使类对象无法访问函数?我尝试使用classmethod但它似乎不起作用,我仍然可以从外部 Python 文件访问该函数。


main.py


class MyClass:

   def __init__(self):

       self.my_var = 5

   

   @classmethod

   def dont_access_me(self) -> str:

       return 'Dont Access Me'

second.py


from main import MyClass


instance = MyClass()

print(instance.dont_access_me()) # valid


小怪兽爱吃肉
浏览 96回答 3
3回答

呼唤远方

Python 并没有真正的私有方法。但是,如果您想表明用户不应使用此功能,并且用户不能期望此功能存在或在您的 API 的未来版本中具有相同的签名,那么通常的做法是在方法前加上下划线。如果你有:class MyClass:   def __init__(self):       self.my_var = 5   def amethod(self):       rslt = self._dont_access_me()   def _dont_access_me(self) -> str:       return 'Dont Access Me'instance = MyClass()然后用户知道,他们可以使用。instance.amethod(),但他们不应该使用instance._dont_access_me()类方法就像大多数其他编程语言中的东西完全不同。它们用于方法,可以在没有实例的情况下调用,但是如果有实例也可以调用它们。一个例子是:class AClass:    instance_count = 0    def __init__(self):        cls = self.__class__        cls.instance_count += 1        self.idx = cls.instance_count    @classmethod    def statistics(cls):        print("So far %d objects were instantiated" %              cls.instance_count)a = AClass()b = AClass()AClass.statistics()# However you can also access a classmethod if you have an instancea.statistics()

千巷猫影

我不确定这是否是您要查找的内容,但您可以将其设为私有方法,如下所示:def _dont_access_me(self):      return 'Dont Access Me'从技术上讲,它仍然可以访问,但它至少让用户知道它是一个私有方法

陪伴而非守候

您不能使类方法真正私有。在这个问题中对这个主题进行了很好的讨论:Why are Python's 'private' methods not actually private?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python