【发布时间】:2015-11-07 21:52:19
【问题描述】:
在python中,我们可以很容易地通过它的名字来引用一个全局方法。
def globalfoo(a):
print(a)
class myClass:
def test(self):
v = globalfoo
v("hey")
t = myClass()
t.test()
现在在 python 中,也可以通过在其前面加上两个下划线来“隐藏”一个(类)方法。 - 我认为(!)一个人可以对全局函数做同样的事情——只制作一个全局函数模块。 (与 C++ 类似,可以决定将函数声明不在头文件中,因此它仅对当前编译单元可见)。
然后我尝试将其结合起来:
def __globalfoo(a):
print(a)
class myClass:
def test(self):
v = __globalfoo
v("hey")
t = myClass()
t.test()
但是这似乎不起作用,会引发一个错误,即“_myCLass__globalfoo”未定义。那么我如何让这两件事都起作用:引用一个函数。并从外部范围隐藏功能?
在这种情况下,静态方法是唯一/最佳解决方案吗?
【问题讨论】:
-
为什么不在类中定义该函数?
-
是的,
@staticmethod是一个不错且干净的解决方案。 -
@DanielSanchez 因为该函数需要类中的任何内容。它也不是特别与类耦合。对于其他类,它也可能是一个有用的实用函数。但它过于具体,无法公开:它基本上是一个经过精心设计的数学方程,部分求解。
-
@paul23 但是如果这个函数会被多个类使用,你为什么要私有化呢?
-
您无法对其他模块隐藏该功能,所以我认为您的问题没有实际意义。
标签: python function-pointers encapsulation