簡體   English   中英

使用類而不在python中調用構造函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM