首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

编程篇11:春花秋月何时了,对象知多少

每次爸妈让带对象回家,都让我感觉很崩溃。

现实中虽然是单身狗,但在程序的世界里对象可不会少,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中一切皆为对象的含义了。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180420G1EG8200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券