You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python代码中Database类自动实例化及终端提前输出问题解析

问题解答

先贴出完整代码:

from abc import *

class Myclass(ABC):
    @abstractmethod
    def connect(self):
        pass
    
    @abstractmethod
    def disconnect(self):
        pass

class Oracle(Myclass):
    def connect(self):
        print("Connecting to Oracle database")
    
    def disconnect(self):
        print("Disconnecting fron Oracle")

class Sybase(Myclass):
    def connect(self):
        print("Connecting to Sybase database")
    
    def disconnect(self):
        print("Disconnecting fron Sybase")

class Database:
    str = input("Enter database name: ")
    classname = globals()[str]
    obj = classname()
    obj.connect()
    obj.disconnect()

1. Database类并没有被自动实例化

这段代码里完全没有实例化Database类的操作——你找不到db = Database()或者Database()这种创建类实例的语句。代码只是定义了Database这个类,从头到尾都没创建过它的实例。

2. 终端直接显示输入提示的原因

因为你把input()这些代码写在了类的顶层作用域里,属于类属性的定义代码。Python在加载并解析类定义的时候,会立即执行类内部顶层的所有代码,不管你有没有创建这个类的实例。

简单说:当Python读到class Database:这段代码时,就会依次执行里面的str = input(...)、classname = globals()[str]等语句,所以程序一运行到解析Database类的步骤,就会立刻弹出输入提示,跟有没有实例化这个类完全没关系。

内容的提问来源于stack exchange,提问作者Swayam Badhe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 20:39:19