使用了python 3.12编写下列程序 运行时报错
class GetConfig(object): def __int__(self): current_dir = os.path.dirname(os.path.abspath(__file__)) print(current_dir) sys_cfg_file = os.path.join(current_dir, "sysConfig.cfg") self.conf = configparser.ConfigParser() self.conf.read(sys_cfg_file) def get_db_host(self): db_host = self.conf.get("DB", "host") return db_hostif __name__ == "__main__": gc1 = GetConfig() var = gc1.get_db_host()
报错信息:
Traceback (most recent call last): File "D:\Code\InterfaceCrawlTool\getConfig.py", line 48, in <module> var = gc1.get_db_host() ^^^^^^^^^^^^^^^^^ File "D:\Code\InterfaceCrawlTool\getConfig.py", line 21, in get_db_host db_host = self.conf.get("DB", "host") ^^^^^^^^^AttributeError: 'GetConfig' object has no attribute 'conf'
为什么会提示找不到属性呢?我尝试在__init__方法中加入self.name="test",然后使用
gc1 = GetConfig()
gc1.name 也是报同样的错误
Dube, 尽管他们很相似, 但是双胞胎也是有区别的。你写的是 __int__
, 少了字母 i
, 那可就不是python官方承认的 __init__
了。
你写的是__int__,不是__init__
在你的代码中,你尝试在类的构造函数 __init__
中定义一个属性 conf
,但这个属性只在该函数的作用域内存在,所以它不能在类的其他方法中被访问。
在 Python 中,self
参数表示类的实例,而 self.conf
是在 __init__
方法中定义的实例变量。这意味着,只有当你在类的实例化过程中(即创建类的对象时)调用 __init__
方法时,这个属性才会被创建。一旦 __init__
方法执行完毕,这个属性就不再存在,这就是为什么你在 get_db_host
方法中无法访问 self.conf
的原因。
要解决这个问题,你可以将 self.conf
的定义移出 __init__
方法,直接在类中定义,就像这样:
class GetConfig(object): def __init__(self): current_dir = os.path.dirname(os.path.abspath(__file__)) print(current_dir) sys_cfg_file = os.path.join(current_dir, "sysConfig.cfg") self.conf = configparser.ConfigParser() self.conf.read(sys_cfg_file) def get_db_host(self): db_host = self.conf.get("DB", "host") return db_host
这样,self.conf
就会在类的实例化过程中被创建,并且在类的其他方法中都可以被访问。
问题内容: 假设我有多个继承方案: 有编写的两个典型方法的: (老式) (较新的样式) 但是,无论哪种情况,如果父类(和)没有遵循相同的约定,则代码将无法正常工作(某些代码可能会丢失,或被多次调用)。 那么又是什么正确的方法呢?说“保持一致,遵循一个或另一个”很容易,但是如果或来自第三方图书馆,那又如何呢?有没有一种方法可以确保所有父类构造函数都被调用(以正确的顺序,并且只能调用一次)? 编辑:看
问题内容: 今天就遇到这个问题,以防其他人遇到同样的问题。 原来要让IE在动态生成的元素上运行onclick,我们不能使用setAttribute。相反,我们需要使用包装要运行的代码的匿名函数在对象上设置onclick属性。 错误提示: 你可以做 但根据@scunliffe,它将以非标准模式在IE中中断。 你根本做不到 因为它会立即执行,并将runCommand()的结果设置为onClick属性值
问题内容: Python源目录中的init.py用于什么? 问题答案: 它曾经是软件包的必需部分(旧的3.3之前的“常规软件包”,而不是较新的3.3+“命名空间软件包”)。 这是文档。 Python定义了两种类型的程序包,常规程序包和名称空间程序包。常规软件包是Python 3.2及更早版本中存在的传统软件包。常规软件包通常实现为包含文件的目录。导入常规程序包时,将隐式执行此文件,并将其定义的对象
问题内容: 我是刚开始学习Python的Java人。举个例子: 我肯定有很多冗余代码(我知道在Java中,上面的代码有很多冗余)。 对于已经从父类继承了哪些属性,哪些部分是多余的? 问题答案: 在python中为类编写函数时,应始终调用其超类的函数。我们可以使用它直接将相关属性传递给超类,因此您的代码如下所示: 正如其他人指出的那样,您可以替换该行 与 并且代码将执行相同的操作。这是因为pytho
Python @classmethod 为什么不能调用 @property 装饰的属性 ? AttributeError: 'property' object has no attribute 依然不是没清楚
我有以下JSON: 我正试图用杰克逊把它转换成pojo。这就是我所拥有的: 我的另一个类有字段,这些字段被命名为JSON中的元素,并具有getter和setter。 上面的代码可以工作,但是当我只是创建一个没有配置的基本ObjectMapper对象时,它不起作用。这是为什么?这是堆栈跟踪错误: 这是我的pojo类,包含getter和setter: