- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
42:对象、类、以及从属关系
42 :对象、类、以及从属关系
练习42.对象、类、以及从属关系
有⼀个重要的概念你需要弄明⽩,那就是“类(class)”和“对象(object)”的区别。问题在
于,class 和 object 并没有真 的不同。它们其实是同样的东西,只是在不同的时间名
字不同罢了。我⽤禅语来解释⼀下吧:
⻥和三⽂⻥有什么区别?
这个问题有没有让你有点晕呢?说真的,坐下来想⼀分钟。我的意思是说,鱼和三⽂
鱼是不⼀样,不过它们其实也是⼀样的是不是?三⽂鱼是鱼的⼀种,所以说没什么不
同,不过三⽂鱼又有些特别,它和别的种类的鱼的确不⼀样,⽐如三⽂鱼和⼤⽐⽬鱼
就不⼀样。所以三⽂鱼和鱼既相同又不同。怪了。
这个问题让⼈晕的原因是⼤部分⼈不会这样去思考问题,其实每个⼈都懂这⼀点,你
⽆须去思考鱼和三⽂鱼的区别,因为你知道它们之间的关系。你知道三⽂鱼是鱼的⼀
种,⽽且鱼还有别的种类,根本就没必要去思考这类问题。
让我们更进⼀步,假设你有⼀只⽔桶,⾥边有三条三⽂鱼。假设你的好⼈卡多到没地
⽅⽤,于是你给它们分别取名叫Frank , Joe ,和Mary 。现在想想这个问题:
Mary和三⽂⻥有什么区别?
这个问题⼀样的奇怪,但⽐起鱼和三⽂鱼的问题来还好点。你知道Mary是⼀条三⽂
鱼,所以他并没什么不同,他只是三⽂鱼的⼀个“实例(instance)” 。Frank和Joe⼀样也
是三⽂鱼的实例。我的意思是说,它们是由三⽂鱼创建出来的,⽽且代表着和三⽂鱼
⼀样的属性。
所以我们的思维⽅式是 (你可能会有点不习惯):鱼是⼀个“类(class)” ,三⽂鱼是⼀
个“类(class)” ,⽽Mary是⼀个“对象(object)” 。仔细想想,然后我再⼀点⼀点慢慢解释
给你。
鱼是⼀个“类” ,表⽰它不是⼀个真 的东西,⽽是⼀个⽤来描述具有同类属性的实例
的概括性词汇。 你有鳍?你有鳔?你住在⽔⾥?好吧那你就是⼀条鱼。
后来河蟹养殖专家路过,看到你的⽔桶,于是告诉你:“⼩伙⼦,你这些鱼是三⽂
鱼。” 并且专家还定义了⼀个新的叫做“三⽂鱼”的“类” ,⽽这个“类”又有它特定的属
性。长⿐⼦?浅红⾊的⾁?⽣活在海洋⾥?吃起来味道还可以?那你就是⼀条三⽂
鱼。
最后⼀个厨师过来了,他跟专家说:“⾮也⾮也,你看到的是三⽂鱼,我看到的是
Mary ,⽽且我要把Mary和剁椒配⼀起做⼀道⼩菜。”于是你就有了⼀只叫做Mary的三
⽂鱼的“实例(instance)” (三⽂鱼也是鱼的⼀个“实例” ),并且你使⽤了它,这样它就
是⼀个“对象(object)” 。
这会你应该了解了:Mary是三⽂鱼的成员,⽽三⽂鱼又是鱼的成员。这⾥的关系式:
对象属于某个类,⽽某个类又属于另⼀个类。
写成代码是什么样⼦
这个概念有点绕,不过实话说,你只要在创建和使⽤ class 的时候操⼼⼀下就可以
了。我来给你两个区分 Class 和 Object 的⼩技巧。
⾸先针对类和对象,你需要学会两个说法,“is-a(是啥)”和“has-a(有啥)” 。“是啥”要⽤
在谈论“两者以类的关系互相关联”的时候,⽽“有啥”要⽤在“两者⽆共同点,仅是互为
参照”的时候。
接下来,通读这段代码,将每⼀个注释为##?? 的位置标明他是“is-a”还是“has-a”的关
系,并讲明⽩这个关系是什么。在代码的开始我还举了⼏个例⼦,所以你只要写剩下
的就可以了。
记住,“是啥”指的是鱼和三⽂鱼的关系,⽽“有啥”指的是三⽂鱼和鳃的关系。
## Animal is-a object (yes, sort of confusing) look at the extra c
class Animal(object):
pass
##
class Dog(Animal):
def __init__(self, name):
##
= name
##
class Cat(Animal):
def __init__(self, name):
##
= name
##
class Person(object):
def __init__(self, name):
##
= name
## Person has-a pet of some kind
self.pet = None
##
class Employee(Person):
def __init__(sel
文档评论(0)