self参数 - __ init__ ()方法 super(Net, self).__init__()具体作用是什么

看到别人的代码中会出现

  • 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有三点是很重要的:

  1. self指的是实例本身,而不是类
  2. self可以用this替代,但是不要这么去写
  3. 类的方法中的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__函数属性

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值