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

如何在实例化类时重写__init__方法中定义的属性?

如何在实例化时重写Python类__init__中定义的属性?

问题背景

你有这样一个类:

class MyFunObject(object):
    def __init__(self):
        self.url = "http://myurl.com"

尝试通过以下代码实例化并传入自定义url时触发了错误:

server = MyFunObject(url="http://www.google.com")

错误信息:

TypeError: __init__() got an unexpected keyword argument 'url'

解决方案

当然可以重写这个属性!报错的原因是你的__init__方法没有声明接受url这个参数,所以实例化时传入它会被判定为意外参数。下面是几种实用的解决方法:

方法1:修改__init__方法,添加带默认值的url参数

这是最直接的方式,让__init__接受url参数并设置默认值,这样既保留原有的默认行为,又支持自定义传入:

class MyFunObject(object):
    def __init__(self, url="http://myurl.com"):
        self.url = url

现在你可以两种方式实例化:

  • 使用默认url:server = MyFunObject()
  • 自定义url:server = MyFunObject(url="http://www.google.com")

方法2:实例化后直接修改属性

如果没办法修改原类的__init__方法(比如类来自第三方库),可以先实例化对象,再直接覆盖url属性:

server = MyFunObject()
server.url = "http://www.google.com"

这种方式简单直接,适合快速修改单个属性的场景。

方法3:使用**kwargs实现更灵活的参数处理

如果以后可能需要添加更多可自定义的属性,可以用关键字参数包来处理,扩展性更强:

class MyFunObject(object):
    def __init__(self, **kwargs):
        # 优先使用传入的url,没有则用默认值
        self.url = kwargs.get('url', "http://myurl.com")
        # 还可以添加其他属性的处理,比如:
        # self.name = kwargs.get('name', 'default_name')

这种方式允许你传入任意多个关键字参数,按需处理即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:38:14