目录
简介
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