python: вызвать класс из скрипта в другом каталоге и получить функцию - PullRequest
1 голос
/ 18 марта 2020

У меня есть скрипт, над которым я сейчас работаю, с именем exp1.py , и он находится в

/project/exp1.py 

В этом скрипте я пытаюсь вызвать функцию с именем computelikelihood () , который находится внутри класса Class () , который находится в сценарии method.py , в другом каталоге:

 /project/methods/c_CLASS/method.py

Итак, в моем коде в exp1.py я делаю это:

import sys

sys.path.append('/project/methods/c_CLASS/')

, что приводит меня в папку, где находится method.py , но когда я хочу вызвать Class() из method.py , чтобы я получил функцию computelikelihood () , которую я на самом деле хочу, я получаю ошибку. Я пытаюсь это:

from method import Class
from Class import computelikelihood

Но я получаю ImportError: No module named Class. Кто-нибудь может помочь?

РЕДАКТИРОВАТЬ Вот как выглядит __init__ моего Class:

class Class:
    def __init__(self,e2wl,w2el,label_set):
        self.e2wl = e2wl
        self.w2el = w2el
        self.workers = self.w2el.keys()
        self.examples = self.e2wl.keys()
        self.label_set = label_set

1 Ответ

1 голос
/ 18 марта 2020

Поскольку вы пытаетесь использовать метод из класса, вы должны сделать это через класс. Не импортируйте только одну функцию, так как она не предназначена для использования в таком виде:

from method import Class

Class.computelikelihood()

Однако это работает, только если computelikelihood является статическим / классовым методом:

class Class:

    @classmethod
    def computelikelihood(cls):
        ...

    # or

    @staticmethod
    def computelikelihood():
        ...

Если это метод экземпляра:

class Class:
    def computelikelihood(self):
        ...

Сначала вам нужно создать экземпляр объекта класса Class:

from method import Class

classObject = Class()
classObject.computelikelihood()
...