从0.1开始学Python——[19]
之前学习了类的具体定义的方法,以及一些如何定义好类的原则。但是类作为程序中很重要的角色,类的学习还有一些内容,需要深入学习。
类的特殊(魔术)方法
定义方法的过程有一个问题,就是上次学习到,方法可以一样,但是属性最好各自定义,这样有时会导致方法里面需要的属性在类里面是没有定义的,而用类创建的对象一开始也没有这个属性,于是如果有一个对象你没手动定义这个属性就用不了这个方法,也就是说属性没有自动适配的功能。但是我们需要让他适配,最好创建对象的时候可以自动赋值方法要用到的属性,而且要使用户必须设置某个方法要用的属性,不然就创建不了对象。
这时候就需要用到一些特殊方法,定义方法比较简单:(双下划线)方法名(双下划线)。注意,特殊方法不需要用户自己调用,特殊方法会在特殊时刻自动调用。例如__init__(self):方法,这个方法会在用类创建对象的时候自动执行:
class Jntm():
def __init__(self):
print('姬霓太美')
kk = Jntm()
xjz = Jntm()
姬霓太美
姬霓太美
在知道特殊方法之后,包含特殊方法的类创建对象的流程会产生一些变化:创建一个变量->在内存里面创建一个新对象->特殊方法执行->将对象id赋给变量。(摘自尚硅谷)也就是说__init__(self):这个方法在对象创建时就会调用,这个特殊方法叫初始化,作用就是向新建的对象里面初始化属性。这样这个方法就可以直接往要创建的对象里面加入方法必备的属性了,而且这样给的属性直接在实例对象里面,而不像之前的公共属性在类里面。这样就可以以灵活的方式进行初始属性赋值了。
class Jntm():
def __init__(self,who):
self.who = who
def zwjs(self):
print('%s大家好'% self.who)
kk = Jntm('全民制作人们') # 注意,因为调用方法默认自动传一个实参,所以你只要输入self后面形参对应的实参就行
xjz = Jntm('小黑子们')
kk.zwjs()
xjz.zwjs()
全民制作人们大家好
小黑子们大家好
换一个方式也能看出各个对象的初始属性who发生了改变。
print(kk.who)
print(xjz.who)
全民制作人们
小黑子们
由此我们基本知道了完整的类的结构:
class 类名([父类]):
(缩进符)公共属性(建议不加)
(缩进符)def 特殊方法():
(缩进符)def 方法1():
(缩进符)def 方法2():
… …
根据这样的一些内容我们可以创建一些简单但是有意义的类。