我是java的新手。
在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无法定义。
我如何完全解决这种情况。
答案 0 :(得分:5)
通常你会这样做:
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没有 true 隐私。如果用户想要调用您的方法,他们可以。这只是口头禅"We're all consenting adults here"所描述的生活现实。但是,如果他们将您的方法称为带有下划线的前缀,则他们应该得到任何破坏。
另请注意,有两个级别的隐私:
def _private_method(self, ...): # 'Normal'
...
def __private_with_name_mangling(self, ...): # This name gets mangled to avoid collisions with base classes.
...
可以在tutorial找到更多信息。
答案 1 :(得分:2)
另一种可能性是你希望func2是私有的(仅存在于func1的范围内)。如果是这样,你可以这样做:
def func1(self, args):
def func2(args):
# do stuff
pass
return func2(args)
答案 2 :(得分:1)
试试这个:
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