вернуть строку из функции в классе в Python - PullRequest
0 голосов
/ 24 апреля 2019

Невозможно вернуть строку из класса Python в другой класс Python.

Создано два класса, и необходимо получить строку из одного в другой.Я продолжаю получать сообщение -
'app.classes.xxx' has no attribute 'returnDBString'

Class1.py

from app.classes import DBManager

 def CustomerSetup(self, user_id):
        db = DBManager.returnDBString()
        cnxn = pdc.connect(db)

DBManager.py

class DBManager():

    def returnDBString():
        return 'Database string and connection info'

    def returnConnection():
        return pdc.connect(returnDBString())

Я ожидал получить реальную строку в классе, но получаю сообщение об ошибке

app.classes.DBManager' has no attribute 'returnDBString

Ответы [ 4 ]

1 голос
/ 24 апреля 2019

Это не имеет ничего общего с возвращением строк.

По какой-то причине вы поместили свою функцию в класс, который, как оказалось, имеет то же имя, что и модуль, в котором он находится. Но Python не является Java;функции не обязательно должны быть в классах, и если вы определяете класс, вам нужно импортировать его специально, а не только модуль (или, по крайней мере, ссылаться на него через модуль).

Inв любом случае вы должны удалить объявление класса и просто поместить две функции непосредственно на уровне модуля.

0 голосов
/ 24 апреля 2019

Это проблема удобства использования модуля с классами. Есть 2 решения вашей проблемы:

1) Если вы создаете класс с функцией-членом в DBManager.py и хотите использовать его в другом файле. Первое, о чем вам следует помнить: класс - это ничто без объекта класса. , Вам нужно создать объект вашего класса и вызвать функцию returnDBString () с этим объектом. имейте в виду, что вам нужно создать конструктор init (), а также класса, его неполное в вашем коде.

def CustomerSetup(self, user_id): DBObject = DBManager() db = DBObject.returnDBString()

2) Не иметь класс в DBManager.py , удалить класс и иметь ту же функцию без класса. В этом случае ваш текущий код Class1.py будет работать.

0 голосов
/ 24 апреля 2019

Вам нужно создать экземпляр класса в Class1.py и сделать для него доступным pdc:

db = DBManager.DBManager(pdc).returnDBString()

Обратите внимание на скобки, DBManager().

Вы такженужно написать свой DBManager класс примерно так:

class DBManager():

    def __init__(self, pdx):
        self.pdx = pdx

    def returnDBString(self):
        return 'Database string and connection info'

    def returnConnection(self):
        return self.pdc.connect(self.returnDBString())
0 голосов
/ 24 апреля 2019

Украсьте метод с помощью @classmethod, если имеет смысл использовать этот метод в DBManager

...