[英]how to define equivalent of private method in python
我是来自Java的python新手。
在java中,我们将有类似
public void func1()
{
func2();
}
private void func2(){}
但是,在python中,我想要等效的
def func1(self):
self.func2("haha")
pass
def func2(str):
pass
它给我带来一个错误,该错误恰好需要1个参数(给定2个)
我已经检查了解决方案,例如使用
def func1(self):
self.func2("haha")
pass
@classmethod
def func2(str):
pass
但它不起作用
在func2中取出self会使全局名称func2没有定义。
我该如何解决这种情况。
通常,您会执行以下操作:
class Foo(object):
def func1(self):
self._func2("haha")
def _func2(self, arg):
"""This method is 'private' by convention because of the leading underscore in the name."""
print arg
f = Foo() # make an instance of the class.
f.func1() # call it's public method.
请注意,python没有真正的隐私。 如果用户想调用您的方法,则可以。 口头禅所描述的只是生活中的事实: “我们都同意这里的成年人” 。 但是,如果他们调用带下划线前缀的方法,则应避免造成的任何损坏。
另请注意,隐私有两个级别:
def _private_method(self, ...): # 'Normal'
...
def __private_with_name_mangling(self, ...): # This name gets mangled to avoid collisions with base classes.
...
可以在教程中找到更多信息。
另一种可能性是您希望func2对func1私有(仅存在于func1的范围内)。 如果是这样,您可以这样做:
def func1(self, args):
def func2(args):
# do stuff
pass
return func2(args)
尝试这个:
class Foo:
def method(self):
self.static_method("haha")
@classmethod
def static_method(clazz, str):
print(str)
>>> Foo().method()
haha
>>> Foo.static_method('hi')
hi
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.