Calling static method in python
我有一个类
1 2 3 | class Person: def call_person(): print"hello person" |
在python控制台中,我导入类Person并调用
你需要做如下的事情:
1 2 3 4 5 6 7 8 9 | class Person(object): #always inherit from object. It's just a good idea... @staticmethod def call_person(): print"hello person" #Calling static methods works on classes as well as instances of that class Person.call_person() #calling on class p = Person() p.call_person() #calling on instance of class |
根据您想做什么,类方法可能更合适:
1 2 3 4 5 6 7 | class Person(object): @classmethod def call_person(cls): print"hello person",cls p = Person().call_person() #using classmethod on instance Person.call_person() #using classmethod on class |
这里的区别在于,在第二个示例中,类本身作为第一个参数传递给方法(而不是将实例作为第一个参数的常规方法,或不接收任何其他参数的StaticMethod)。
现在回答你的实际问题。我敢打赌,您找不到您的方法,因为您已经将类
然后:
1 2 3 | import Person #Person class is available as Person.Person Person.Person.call_person() #this should work Person.Person().call_person() #this should work as well |
或者,您可能希望从模块人员导入类人员:
1 2 | from Person import Person Person.call_person() |
对于什么是模块,什么是类,这些都会变得有点混乱。通常,我尽量避免给类取与它们所在模块相同的名称。然而,这显然并没有被忽视太多,因为标准库中的
最后,值得指出的是,对于这个简单的示例,您不需要类:
1 2 3 | #Person.py def call_person(): print"Hello person" |
现在在另一个文件中,导入它:
1 2 | import Person Person.call_person() #'Hello person' |
每个人都已经解释了为什么这不是一个静态方法,但我会解释为什么你没有找到它。您在模块中而不是在类中查找方法,因此类似这样的方法可以正确地找到它。
1 2 | import person_module person_module.Person.call_person() # Accessing the class from the module and then calling the method |
正如DanielRoseman所说的,你可能想象过,模块中包含了一个与Java相同名字的类,尽管在Python中不是这样的。
那不是静态方法;试试看
1 2 3 4 | class Person: @staticmethod def call_person(): print"hello person" |
有关详细信息,请参阅此处。
在python 3.x中,可以声明一个静态方法,如下所示:
1 2 3 | class Person: def call_person(): print"hello person" |
但是第一个参数为self的方法将被视为类方法。
定义呼叫人(本人):打印"Hello Person"
但在python 2.x中,必须在静态方法之前使用"@static method"
1 2 3 4 | class Person: @staticmethod def call_person(): print"hello person" |
也可以将静态方法声明为
1 2 3 4 | class Person: @staticmethod def call_person(self): print"hello person" |
您需要添加decorator类方法。