每次爸妈让带对象回家,都让我感觉很崩溃。
现实中虽然是单身狗,但在程序的世界里对象可不会少,Python里有一句名言,叫“一切皆为对象”。那么对象是个啥玩意呢?
你妈给你介绍的对象,有姓名有身高,能说又能笑;程序世界里的对象也是这样,用来描述的姓名身高叫做对象的“属性”;说说笑笑这样的动作则叫做对象的“方法”,每一个方法都代表着一个动作。还记得吗,函数也代表着动作,方法是以函数的形式表现出来的。
对象指的是个具体化的概念,例如美嘉的对象是子乔,关谷的对象是悠悠,都是具体到个人。他们每个人都不相同,但又都有着共同特点,把他们的共同特点单独拿出来,按年龄分的话都属于年轻人一类,还可以继续抽象都是人类。这就是程序中”类“的概念。
就跟生物课上讲的门纲目科属种是一样的,只是程序中的区分比较简单粗暴,程序中只有”类“,类的下一级叫“子类”,“子类”的上一级叫“父类”。例如年轻人是人类的子类,人类是年轻人的父类。
类是对象抽象之后的模板,对象是类的具体化了的实例。
还可以继续举例子,比如去餐馆吃饭,图片是菜肴的类,端上餐桌的那一份具体的便是菜肴的对象,而厨师把菜肴做出来的过程就叫做实例化。
类的定义:
>>>classHuman(object): #①
def__init__(self,name,gender): #②
self.name = name #③
self.gender = gender #④
deftalk(self): #⑤
print('%s is talking.' % self.name) #⑥
①先定义了Human类,指定该类是object(顶层类)的子类,子类可以继承父类的特性。
②双下划线开头和结尾的__init__用来对类进行初始化设置,传入三个参数,其中self用来指代实例化后某个具体的对象,不能省略,name和gender则根据实际情况自己定义。
③④将参数name/gender的值赋给self.name/self.gender
⑤定义方法talk,self指代具体的实例,程序运行时会根据不同的实例化对self进行赋值,这个过程是程序自动执行,我们是看不到的,只要别忘了写就好。另外在定义方法的时候通常使用动词。
⑥在print函数中使用了格式化打印,前面的%先挖个坑,后面再遇到%后就用后面的self.name填到前面的%坑里,s则代表这个坑用来埋字符串。
可以看到,从结构上来讲,类是一堆函数的集合。
将类实例化为对象:
将Human类进行实例化成对象one_human:
>>> one_human = Human('Woody','male') #woody即name,male即gender,self不用传值
调用对象的属性:
>>>one_human.name
结果:Woody
>>>one_human.gender
结果:male
>>>one_human.talk() #这里self即one_human
结果:Woody is talking.
类的继承:
就像现实中一样,子类可以继承父类的属性和方法。
先定义Human类的子类Friend:
>>>classFriend(Human): #①
def__init__(self,name,gender,weight): #②
super().__init__(name,gender) #③
self.weight = weight #④
defmakeFriend(self): #⑤
super().talk() #⑥
①定义了子类Friend,并指定为Human的子类,并可以继承父类的属性和方法。
②初始化方法__init__中,指定父类的__init__中定义的所有属性,另外增加Friend自己的属性gender。继承就好像提前先把父类的程序运行了一遍,所以如果父类中定义了__init__方法,则要为其全部属性进行传值。另外__init__方法对于类来说并不是必须的,可以省略。
③使用super()调用父类,调用父类时不用使用self,因为此时self指代的是子类的实例对象。
④在继承属性之外,定义了自己的属性。
⑤定义子类方法。
⑥使用super()直接调用父类的方法,当然也可以定义自己自己的方法。
将子类实例化:
>>>One_Friend = Friend('Lily','female',95)
>>>One_Friend.name
结果:Lily
>>>One_Friend.gender
结果:female
>>>One_Friend.weight
结果:95
>>>One_Friend.makeFriend()
结果:Lily is talking.
现在我们回想一下,以前见过的所有字符串,数值,列表,函数都有着自己的方法或者属性,本质上它们都是对象,以后即将接触的其他类型也都符合这个特点。这就是Python中一切皆为对象的含义了。
领取专属 10元无门槛券
私享最新 技术干货