我想知道我的方法是由用户直接调用还是由其他方法调用。为了减少抽象:
class myclass():
def __init__(self, ...):
....
def method1(self, ...):
...
--- some if statement --
print "Hello"
return something
def callmethod(self, ...):
x = self.method1(...)
return x*2
myinstance = myclass(...)
myinstance.method1(...)
--> 'Hello'
myinstance.callmethod(...)
--> -
希望我的班级明确我要做的事情:当用户调用'method1'时,将执行print语句,但如果'method1'被另一个方法调用,如'callmethod',则不应执行print语句。因此,我需要'some if statement'来检查用户是直接调用'method1'还是通过其他方法调用。谢谢你的帮助!
答案 0 :(得分:3)
不,你不想这样做。
如果要根据方法的调用方式更改行为,则需要使用参数。您可以使用默认值来简化此操作,例如:
def method1(self, do_print=True):
...
if do_print:
print "Hello"
return something
def callmethod(self, ...):
x = self.method1(do_print=False)
return x*2
现在,将打印myinstance.method1()
,而myinstance.callmethod()
则不会。
答案 1 :(得分:1)
使用python检查器实际上可以实现,例如:
import inspect
class myclass():
def __init__(self):
pass
def method1(self):
(frame, filename, line_number, function_name, lines, index) = inspect.getouterframes(inspect.currentframe())[1]
if function_name == '<module>':
print "Hello"
return 2
def callmethod(self):
x = self.method1()
return x*2
myinstance = myclass()
myinstance.method1()
myinstance.callmethod()
但是我同意丹尼尔的看法并不是一种优雅的方式来实现结果,因为它隐藏了一些行为。
有关详细信息,请参阅:this post