Python和类

时间:2010-12-24 12:49:43

标签: python oop class

我怎么能先打电话.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

4 个答案:

答案 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中定义类的方法时,它会自动作为第一个参数传递给它调用它的实例。如果您不希望这种情况发生,您可以做两件事:

  1. 使用@staticmethod装饰器,它会将 no 额外参数传递给该函数(也就是说;它将被调用,正好与那些看起来应该是它的参数一起调用叫做)。这通常不常用,因为定义全局函数通常更清楚,而不用担心类命名空间。

  2. 使用@classmethod装饰器,它将传递定义了函数的而不是self作为第一个参数。 (这个参数通常称为cls。)这些通常用于一般适用于类的函数,比如from_string或其他类似的函数。


  3. 我想知道为什么你想要这样做;可能有更好的方法!