'__init__'和‘__name__’的用法

 

 


目录

 

简介

'__init__'的用法

‘__name__’的用法


简介

Python模块中通常会定义很多变量和函数,这些变量和函数相当于模块中的一个功能,模块被导入到别的文件中,可以调用这些变量和函数 

'__init__'的用法

1. 用法类似于JAVA的构造函数

代码段如下:

class Person:
    def __init__(self, name):
        self.name = name
    def sayHi(self):
        print('Hello, my name is', self.name)

p = Person('Swaroop')
p.sayHi()

我们把__init__方法定义为取一个参数name(以及普通的参数self)。在这个__init__里,我们只是创建一个新的域name

初始化时并没有专门调用__init__方法,只是在创建一个类的新实例的时候,把参数包括在圆括号内跟在类名后面,从而传递给__init__方法,这是这种方法的重要之处。它相当于JAVA里面的构造函数。

2.  其可以被子类继承或重写

class NewOne(Person):
    def getName(self):
        return  self.name + ' NewOne'

if __name__ == '__main__':
    b = NewOne('hello')
    print(b.getName())

子类可以不重写__init__,实例化子类时,会自动调用超类中已定义的__init__。 输出为

hello NewOne

 但如果重写了__init__,实例化子类时,则不会隐式的再去调用超类中已定义的__init__,如下

class NewOne(Person):
    def __init__(self, name1,name2):
        self.name1 = name1
        self.name2 = name2
    def getName(self):
        return  self.name1 + self.name2 + ' NewOne'

if __name__ == '__main__':
    b = NewOne('hello_1','Hello_2')
    print(b.getName())

hello_1Hello_2 NewOne

子类重写__init__()方法又需要调用父类的方法:使用super关键词:

class NewOne(Person):

    # def __init__(self, name1,name2):
    #     self.name1 = name1
    #     self.name2 = name2

    # def __init__(self,name1,name2):
        # Person.__init__(self,name1)
        # self.name2 = name2

    def __init__(self, name1, name2):
        super(NewOne,self).__init__(name1)
        self.name2 = name2

    def getName(self):
        return  self.name1 + self.name2 + ' NewOne'

‘__name__’的用法

__name__ 可以标识模块的名字,可以显示一个模块的某功能是被自己执行还是被别的文件调用执行,假设模块A、B,模块A自己定义了功能C,模块B调用模块A,现在功能C被执行了:

如果C被A自己执行,也就是说模块执行了自己定义的功能,那么 __name__=='__main__'

如果C被B调用执行,也就是说当前模块调用执行了别的模块的功能,那么__name__=='A'(被调用模块的名字)

其实换一种说法也就是__name__ 表示当前程序运行在哪一个模块中

class Student:

    def __int__(self):
        pass

    def differ(self):
        if __name__=='__main__':
            print('My own module:' + __name__)
        else:
            print('Called by :'+ __name__)

s=Student()
s.differ()

输出是:
My own module:__main__


————————————————
版权声明:本文为CSDN博主「xmp1669217327」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xmp1669217327/article/details/81382174

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值