看到别人的代码中会出现
- def __init(self):
- super(Student, self).__init__()
- self参数
def __init__(self):
pass
super(Student, self).__init__()
def xxx(self):
pass
self参数
self指的是实例Instance本身,在Python类中规定,函数的第一个参数是实例对象本身,并且约定俗成,把其名字写为self,也就是说,类中的方法的第一个参数一定要是self,而且不能省略。
我觉得关于self有三点是很重要的:
- self指的是实例本身,而不是类
- self可以用this替代,但是不要这么去写
- 类的方法中的self不可以省略
首先第一点
self指的是实例本身,而不是类,在类当中加了self就相当于类中的局部变量
class Student:
def text(self):
print('我是函数text')
def page(self):
self.text()
if __name__ == '__main__':
print(Student().page())
输出结果:
可见我们通过self调用text函数使其实例化,输出None是因为page函数没有返回值
没有加上self,只能通过实例化来调用函数
def page():
print('我是函数page')
page()
输出结果:
第二点
在类中参数位置,self就是一个参数占位置符,
class Student:
def text(self):
print('我是函数text')
def page(self, name):
return name
if __name__ == '__main__':
print(Student().page(name='小红'))
输出结果:
class Student:
def text(self):
print('我是函数text')
def page(name):
return name
if __name__ == '__main__':
print(Student().page(name='小红'))
输出结果:就会显示参数错误问题
__ init__ ()方法
在python中创建类后,通常会创建一个 __ init__ ()方法,这个方法会在创建类的实例的时候自动执行。 __ init__ (),为啥 __ init__ ()要加slef上面已经说过,这就不阐述。
比如下面例子中的代码,我们在实例化Student这个对象的时候, __ init__ ()方法就已经自动执行了,
class Student:
def __init__(self,):
print('我是__init__')
def text(self):
print('我是函数text')
def page(self, name):
return name
if __name__ == '__main__':
Student()
执行结果:
__ init__ ()方法就是在实例化类的时候会自己执行
super(Net, self).init()
super
class FooParent(object):
def __init__(self):
self.parent = 'I\'m the parent.'
print('Parent')
def bar(self, message):
print("%s from Parent" % message)
class FooChild(FooParent):
def __init__(self):
# 首先找到 FooChild 的父类(FooChild的父类就是类FooParent),然后把类 FooChild 的__init__()对象转换为类 FooParent 的__init__()对象
super(FooChild, self).__init__()
print('Child')
def bar(self, message):
super(FooChild, self).bar(message)
print('Child bar fuction')
print(self.parent)
if __name__ == '__main__':
fooChild = FooChild()
fooChild.bar('HelloWorld')
运行结果:
先输出Parent,因为:实例化FooChild类对象时候先执行了FooChild中的 __init__函数,而__init__函数继承了FooParent中的__init__所以就输出Parent
其次就是Child,
在Child,后输出HelloWorld from Parent 因为:实例化fooChild类中bar('HelloWorld')函数,而fooChild类中bar()函数继承了FooParent类中的bar函数
之后再是Child bar fuctio
最后输出I'm the parent, 能输出它是应为上面已经继承了FooChild中的 __init__函数,所以FooChild类就具备FooChild中的 __init__函数属性