如何覆盖类中的属性' __init__方法?

时间:2018-05-25 01:24:12

标签: python

如果有类似的话:

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__()方法?

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

class MyFunObject(object):

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

    def Printurl(self)
        print(self.url)

obj = MyFunObject("http://www.google.com")
obj.Printurl()

输出:

http://www.google.com

如果假设:

 obj1 = MyFunObject()
 obj1.Printurl()

输出:

 http://myurl.com

说明:

由于您的函数调用具有关键字参数url,因此期望__init__中的参数。如果你在__init__中添加默认值,如果用户没有在对象声明中传递参数,那么它将采用默认值。

答案 1 :(得分:0)

如果您不想/不能更改类的代码,请记住Python对象的属性都是公共的。因此,除非您担心在url进行任何进一步处理之前更改__init__(),否则您可以执行以下操作:

>>> server = MyFunObject()
>>> server.url = 'http://www.google.com'
>>> print(server.url)
'http://www.google.com'