Ответ 1
Вам нужно сделать что-то вроде:
class Person(object): #always inherit from object. It 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
В зависимости от того, что вы хотите сделать, метод class может быть более уместным:
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
Различие заключается в том, что во втором примере сам класс передается как первый аргумент метода (в отличие от обычного метода, когда экземпляр является первым аргументом или статическим методом, который не получает никаких дополнительных аргументы).
Теперь, чтобы ответить на ваш реальный вопрос. Я уверен, что вы не нашли свой метод, потому что вы поместили класс Person
в модуль Person.py
.
Тогда:
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
В качестве альтернативы вам может потребоваться импортировать класс Person из модуля Person:
from Person import Person
Person.call_person()
Это все немного запутывает, что такое модуль и что такое класс. Как правило, я стараюсь избегать присвоения классов тем же именам, что и модуль, в котором они живут. Однако, по-видимому, это не выглядит слишком сильно, поскольку модуль datetime
в стандартной библиотеке содержит класс datetime
.
Наконец, стоит отметить, что для этого простого примера вам не нужен класс:
#Person.py
def call_person():
print "Hello person"
Теперь в другом файле импортируйте его:
import Person
Person.call_person() #'Hello person'