首页 > 解决方案 > 在调用不带括号的类实例时返回一个对象

问题描述

我有多个要连接的数据库如下:

class DB:
    def __init__(self, database):
        conn_str = ...
        try:
            self.engine = sqlalchemy.create_engine(conn_str)
            self.conn = self.engine.connect()
            print('yay')
        except Exception as e:
            print('\n Something is wrong: \n', e)

    def __call__(self):
        return self.engine

db1 = DB(some_url)

从这里,调用db1.engineordb1()将返回Engine(mssql+pymssql://...) What I would like is for db1(无括号)给我相同的结果:类型为 的对象sqlalchemy.engine.base.Engine

这应该是可能的!考虑一下 Pandaspd.DataFrame()是一个类。您可以调用一个类实例并让它返回一个不带括号的 DataFrame,如下所示:

import pandas as pd
x = pd.DataFrame()
type(x)

pandas.core.frame.DataFrame

我尝试浏览熊猫源代码,但无法弄清楚他们是如何做到的。

标签: pythonpandasclass

解决方案


推荐阅读