![](/img/trans.png)
[英]Constructing a class in python without directly calling the constructor
[英]Using a class without calling the constructor in python
我有簡單的類可以從數據庫中獲取查詢。
# myClass.py
class DB:
def __init__ (self, host, user, password):
self.conn = MySQLdb.connect("localhost","****","****","***")
self.conn.set_character_set('utf8mb4')
cursor = self.conn.cursor()
cursor.execute('SET NAMES utf8mb4;')
cursor.execute('SET CHARACTER SET utf8mb4;')
cursor.execute('SET character_set_connection=utf8mb4;')
def query(self, q):
cursor = self.conn.cursor()
cursor.execute(q)
return cursor
如果我使用下面的查詢可以正常工作,
from myClass import DB
q = DB("..", "..", "..", "..")
_fetch = q.query("... ")
但是,如果由於我要聲明第二行而希望擺脫第二行,請在myClass.py中傳遞host ..
所以,當我嘗試
from myClass import DB
_fetch = DB.query("... ")
即使刪除self,
關鍵字,它也不允許我連接
您可以嘗試類似:
# myClass.py
# code will be executed only once a the first import
conn = MySQLdb.connect("localhost","****","****","***")
conn.set_character_set('utf8mb4')
cursor = conn.cursor()
cursor.execute('SET NAMES utf8mb4;')
cursor.execute('SET CHARACTER SET utf8mb4;')
cursor.execute('SET character_set_connection=utf8mb4;')
class DB:
# class attribute shared among all DB instance
cursor = conn.cursor()
# class method
@classmethod
def query(cls, q):
cls.cursor.execute(q)
return cursor
您可以創建類對象,然后導入並使用它:
# myClass.py
class DB:
def __init__ (self, host, user, password):
# ...
db = DB("..", "..", "..", "..") # Create object ones.
其他模塊中的某處:
from myClass import db
db.query("... ")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.