LearnPython3theHardWay__Excercise 42 Is-A, Has-A, Objects, and Classes

**ex40- 44都是类的知识 **

作者花了大篇幅来讲类和对象的关系。我就不用书上的例子,简单地说,我们可以从上帝视角来看待类和对象。
我想在地球上弄点东西。。。嗯,就先创建一个 人 “类”, 拿起泥土捏了捏,这样我就创建了人这个"类"

class Person():
	...

接下来,我还想再分类,分成男人 “类” 和 女人 “类” 吧,把这个泥人加点东西,,那个泥人去点东西,好了,捏好了。。因为都是人类,继承有人类的特性。

class Man(Person):
	...
class Women(Person):
	...

我觉得还不够,赐给他们名字!男的叫锄禾,女的叫当午。这样我就创建了两个实例!

锄禾 = Man()
当午 = Women()

不知道明白了没,类和对象其实就是 is-a 和 has-a 的关系。看下面的代码,并修改 注释里的??为 用is-a 或 has-a 来描述类和对象

## Animal is-a object (yes, sort of confusing) look at the extra credeit
class Animal(object):
    pass

## ??
class Dog(Animal):

    def __init__(self,name):
        ## ??
        self.name = name

## ??
class Cat(Animal):

    def __init__(self,name):
        ## ??
        self.name = name

## ??
class Person(object):

    def __init__(self,name):
        ## ??
        self.name = name

        ## Person has-a pet of some kind
        self.pet = None

## ??
class Employee(Person):

    def __init__(self, name, salary):
        ## ?? hmm what is this strange magic?
        super(Employee, self).__init__(name)
        ## ??
        self.salary = salary
        
## ??
class Fish(object):
    pass

## ??
class Salmon(Fish):
    pass

## ??
class Halibut(Fish):
    pass


## rover is-a Dog
rover = Dog('Rover')

## ??
satan = Cat("Satan")

## ??
mary = Person("Mary")

## ??
mary.pet = satan

## ??
frank = Employee("Frank", 120000)

## ??
frank.pet = rover

## ??
flipper = Fish()

## ??
crouse = Salmon()

## ??
harry = Halibut()

在python3里,class后面的括号里不需要输入 object 。在pycharm里输入类名后,也不会自动加上object。当然,你喜欢还是可以加上的,python哲学里就有这么一句, 显式优于隐式。


Study Drills
  1. 研究一下为什么python要有类?
  2. 能否像对象一样的使用类?
  3. 给练习中的 animals, fish, 和 people 加点方法。看看在父类中定义方法,会有什么效果
  4. 看别人的代码,同样地用is-a 和has-a 来进行练习
  5. 用列表和字典创建更多关系
  6. 你觉得会有 is-many 的关系吗?了解一下多态,并尽量避免它
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值