前后都加双下划綫的方法在python中是独一无二的,加下划线的目的在于避免与普通方法名称冲突。
本文中主要深入理解在定义类的时候必须用到的__init__方法。
在进行详细叙述之前,给大家普及一下,类中的方法和属性。
- 方法:也就是各类中定义的函数,比如我们定义一个车的类,描述车的函数就是一个方法。
- 属性:车的品牌、型号、生产日期等信息就是它的属性
1、__init__方法:无需直接调用,生成实例对象的时候自动调用。
“init”的全称是“initialize”,也就是初始化的意思,所以__init__又称构造方法。
在定义类的时候__init__()方法是必不可少的。
init()这种初始化方法,用来初始化新创建对象的属性,在一个对象被创建以后会立即调用,比如像实例化一个类:
demo
class Car():
def __init__(self,make,model,year): ###
self.make = make
self.model = model
self.year = year
my_car = Car('aodi','A4','2010')
print(my_car.model)
aodi
程序中没有直接调用__init__方法,但make,model,year等属性通过Car()类自动调用了__init__方法,生成了属性。
2、self参数
“self”的英文意思很明显,是自己的意思。
这里自己隐含的含义是
- 指的是,实例Instance本身。
- 同时, 由于说到“自己”这个词,都是和相对而言的“其他”而说的;而此处的其他,指的是,类Class,和其他变量,比如局部变量,全局变量等。
此处的self,是个对象(Object),是当前类的实例。
因此,对应的self.valueName 和 self.function()中的valueName:表示self对象,即实例的变量。与其他的,Class的变量,全局的变量,局部的变量,是相对应的。
function:表示是调用的是self对象,即实例的函数。与其他的全局的函数,是相对应的。
因为Python已经规定:函数的第一个参数,就必须是实例对象本身,并且约定俗成,把其名字写为self。因此我们再定义类中的所有函数时必须传入self参数。
demo
class Car():
def __init__(self,make,model,year): ###
self.make = make
self.model = model
self.year = year
def get_descriptive_name(self):
long_name = self.year+' '+self.make+" "+self.model
print(self) ###看下self指向哪里
print(type(self)) ###看下self类型是什么
return long_name
my_car = Car('aodi','A4','2010')
my_car.get_descriptive_name()
输出内容:
<__main__.Car object at 0x000001D31F7408D0> ##可以看出self指向的是一个对象,也就是我们用my_car的实例对象 == self
<class '__main__.Car'> ## self的类型是Car类的实例对象
'2010 aodi A4'