Merhaba SQLlite kendim için bir sınıfa miras atamak istiyorum ama kodu çalıştırdığımda
line 2, in
class database(sql):
TypeError: module() takes at most 2 arguments (3 given)
hatası alıyorum
Merhaba SQLlite kendim için bir sınıfa miras atamak istiyorum ama kodu çalıştırdığımda
line 2, in
class database(sql):
TypeError: module() takes at most 2 arguments (3 given)
hatası alıyorum
Merhaba,
Şöyle deneyin:
import sqlite3
class SQL(sqlite3.Connection):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
sql = SQL("test.db")
cursor = sql.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS test(x, y)")
çok teşekkür ederim yazdığın şekilde oldu Connection niye yazdık acaba anlatma şansın var mı
Çünkü connect
fonksiyonu, Connection
sınıfından örnek oluşturan bir yapıcı fonksiyon.
>>> import sqlite3
>>> type(sqlite3.connect("a.db"))
<class 'sqlite3.Connection'>
>>>
çok teşekkür ederim
Merhaba,
Miras almak yerine sinifin ornegini bir member degiskenine atayip kullanmak daha saglikli olacaktir. (bkz: composition over inheritance)
@aib’in bahsettiği yaklaşımı şöyle örnekleyebiliriz:
import sqlite3
class SQL:
def __init__(self, db_name):
self.connect = sqlite3.connect(db_name)
self.cursor = self.connect.cursor()
def execute(self, query):
self.cursor.execute(query)
self.connect.commit()
sql = SQL("test.db")
sql.execute("CREATE TABLE IF NOT EXISTS test(x, y)")
Burada, sqlite3.Connection
’ı miras almak yerine, var olan bir sınıfı oluşturacağımız sınıfın içinde kullandık.
Bu arada aşağıdaki başlığı da incelemek isteyebilirsiniz: