我怎么能先打电话.TQ在第二节?没有创建第一个对象。
class First:
def __init__(self):
self.str = ""
def TQ(self):
pass
def main(self):
T = Second(self.str) # Called here
class Second():
def __init__(self):
list = {u"RANDINT":first.TQ} # List of funcs maybe called in first
.....
.....
return data
答案 0 :(得分:1)
您需要使TQE方法保持静态。在对Google进行快速检查后(我对Python不太熟悉),我发现了这一点:http://code.activestate.com/recipes/52304-static-methods-aka-class-methods-in-python/
似乎回答了你的问题。
答案 1 :(得分:1)
如果要在不创建类对象的情况下调用方法,则需要创建if的静态方法。使用staticmethod装饰器。但请记住,静态方法不采用self
- 参数,因此您无法使用self!
class First:
@staticmethod
def some_method():
print 'First.some_method()'
class Second:
def __init__(self):
First.some_method()
s = Second()
在您发布的示例中,由于您位于First
,因此您已拥有First.main()
的对象。因此,您可以将First的班级self
传递给Second
:
class First:
def main(self):
second = Second(self) # we pass the current object...
def do_something(self):
print 'First.do_something()'
class Second:
def __init__(self, first): # and recieve it as first
first.do_something()
答案 2 :(得分:1)
class First:
def __init__(self):
self.str = ""
@classmethod
def TQ(self):
pass
def main(self):
T = Second(self.str) # Called here
class Second():
def __init__(self):
list = {u"RANDINT":First.TQ} # List of funcs maybe called in first
.....
.....
return data
仅当您不打算从First的实例调用方法TQ时。快乐的编码。
答案 3 :(得分:1)
澄清一些已在此处发布的答案,因为我认为其中任何一个都没有明确说明:
通常,当您在Python中定义类的方法时,它会自动作为第一个参数传递给它调用它的实例。如果您不希望这种情况发生,您可以做两件事:
使用@staticmethod
装饰器,它会将 no 额外参数传递给该函数(也就是说;它将被调用,正好与那些看起来应该是它的参数一起调用叫做)。这通常不常用,因为定义全局函数通常更清楚,而不用担心类命名空间。
使用@classmethod
装饰器,它将传递定义了函数的类而不是self
作为第一个参数。 (这个参数通常称为cls
。)这些通常用于一般适用于类的函数,比如from_string
或其他类似的函数。
我想知道为什么你想要这样做;可能有更好的方法!