Если вы хотите передать экземпляр вашего DB
класса (db
), вам необходимо передать экземпляр вашему классу Hello
.Попробуйте:
class DB:
def __init__(self, dbname='mydb.db'):
try:
self.connection = sqlite3.connect(dbname)
except:
print('Error')
finally:
pass
class Hello:
def hi(self, db=DB()): # we make it have a default db of DB() (which in turn defaults to 'mydb.db')
# db = DB() # Create db or connect to existing one
# ^^ we remove this line because now this is the default
cursor = db.connection.cursor()
db = DB('test.db') # this makes an instance of your DB class and calls it "db"
h = Hello(db) # now we need to feed this instance
Хотя это, вероятно, не лучший способ сделать это.Вы, вероятно, выиграете больше от наличия одного класса с методами, потому что ваш второй класс в основном бесполезен и в любом случае очень тесно связан с вашим первым классом:
class DB:
def __init__(self, dbname='mydb.db'):
try:
self.connection = sqlite3.connect(dbname)
except:
print('Error')
finally:
pass
def hello(self): # making a method instead
cursor = self.connection.cursor()
db = DB('test.db') # this makes an instance of your DB class and calls it "db"
db.hello() # call our method
РЕДАКТИРОВАТЬ
Я что-то пропустил изначальночто я нашел из тестирования моего кода.Ваш код должен работать нормально, но вам нужно вызвать метод, который вы сделали!Попробуйте это:
import sqlite3
class DB:
def __init__(self, dbname='mydb.db'):
try:
self.connection = sqlite3.connect(dbname)
except:
print('Error')
finally:
pass
class Hello:
def hi(self):
db = DB('test.db')
cursor = db.connection.cursor()
db = DB('test.db')
h = Hello() # make our instance
h.hi() # use the method "hi" associated with the class (our function name within the class)