在Python中,有些名称很特别,开头和结尾都是两个下划线,其中很大一部分都是魔法方法的名称,比如__init__(),__new__()等。
1、__init__方法
也叫构造函数,是初始化方法,对象创建后自动调用。
class Person(object):
def __init__(self):
print('自动调用')
p = Person()
输出:
自动调用
构造函数还可以添加参数,参数可以有默认值。
class Person(object):
def __init__(self,age = 18):
self.age = age
p = Person(20)
print(p.age)
输出:
20
构造函数用于初始化新建对象,对大多数子类来说,除超类的初始化代码外,还需要有自己的初始化代码。重写构造函数时,必须调用超类(继承的类)的构造函数,否则可能无法正确地初始化对象。
如果继承类重写了构造函数,但是又未调用超类的构造函数,可能会导致继承类没有超类的属性,示例如下:
class Person(object):
def __init__(self,age = 18):
self.age = age
class Teacher(Person):
def __init__(self):
pass
t = Teacher()
print(t.age)
输出:
Traceback (most recent call last):
File "F:\test.py", line 11, in <module>
print(t.age)
^^^^^
AttributeError: 'Teacher' object has no attribute 'age'
继承类Teacher没有age属性。
解决方法是使用super(注:super只针对python3使用),有两种写法。
class Person(object):
def __init__(self,age = 18):
self.age