本帖最后由 ABC23 于 2018-4-25 23:11 编辑
在Java中,可以重载构造方法;但是Python中一个类最只能有一个__init__()方法
=================================================
1. 实例一
>>> class Demo:
def __init__(self):
print('0 args given...')
def __init__(self, a):
print('1 args given...')
def __init__(self, a, b):
print('2 args given...')
def __init__(self, a, b, c):
print('3 args given...')
>>> d = Demo()
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
d = Demo()
TypeError: __init__() missing 3 required positional arguments: 'a', 'b', and 'c'
前面写的两个初始化方法被覆盖了,最后该类的初始化方法就是第三个
==================================================
2. 实例二
'
>>> class Demo(object):
pass
>>> d = Demo()
>>> dir(d)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
>>> d.__dict__={'value':1}
>>> dir(d)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'value']
没有初始化就没有初始化,没关系。Python的动态语言可以动态绑定,这里让__dict__增加一个value域,它是实例d特有的。
楼上都误解楼主的意思了