作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我假设 Python 类中的私有(private)静态方法是可以而且应该做的事情。但也许实际上,我应该只是在类外使用模块私有(private)方法。
我想了解从不同位置调用不同类型的静态方法:
我有一个带有私有(private)和公共(public)静态方法的 Python 类。我想从其他地方给他们打电话,从对方那里打电话。
在类外调用公共(public)静态方法时,我必须添加类名。 IE。
m = MyClass.the_staticmethod(100) # I must use the classname as a prefix
查看代码中的问题:
class Myclass():
@staticmethod
__my_privatestaticmethod(myparam):
return myparam
@staticmethod
def the_staticmethod(myparam):
# will the following work?
result = __my_staticmethod(1) # will this work?
# data-mingling set as private, so following line cannot work!
result = Myclass.__my_staticmethod(2) # this cannot work.
result = the_staticmethod(3) # will this work without the prefix
return result
def __my_privatemethod(self, param1):
# which of the following are valid?
return __my_staticmethod(11) # will this work?
# data-mingling set as private, so following line cannot work!
return Myclass.__my_staticmethod(12) # this cannot work.
return the_staticmethod(13) # will this work without the prefix of the class?
return self.the_staticmethod(14) # will this work. Is the self also considered the class?
return Myclass.the_staticmethod(15) # this of course works.
def the_method(param1):
return __my_staticmethod(param1) # will this work?
如果 1 和 11 的答案是否定的,那么结论是您不能创建私有(private)静态方法。
def __my_privatemodulemethod(param1):
return param1
并且可以从我模块中的任何位置调用它,无需前缀。
最佳答案
正如 deceze 在评论中已经提到的那样,在 Python 中,staticmethod
是一种不将实例或类作为第一个参数的方法。由于 Python 没有隐式 this
指针,显然是 staticmethod
无法引用当前类,因此无法调用另一个 staticmethod
在当前类(class)。这里明显的解决方案是使用 classmethods
相反(classmethods 将当前类作为第一个参数):
class Foo(object):
@classmethod
def _protected(cls, arg):
print("{}._protected() called with {}".format(cls.__name__, arg))
@classmethod
def public(cls, arg):
cls._protected(arg)
there IS a notion of private/public achieved with data mingling
class Foo(object):
@staticmethod
def __not_private():
print("peek a boo")
Foo._Foo_not_private()
关于python - 如何从python中的其他方法调用__private静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47133734/
我是一名优秀的程序员,十分优秀!