练习42--IS-A,HAS-A,对象和类

一 对象和类的区别

具体内容可见:https://www.cnblogs.com/luoxun/p/13383993.html

我们必须理解类和对象的区别,这是一个很重要的概念。不过问题是,类和对象之间没有什么真正的区别。它们在不同的时间点其实是同一种东西。

1 鱼和三文鱼的区别是什么?

  • 鱼有不同的种类,三文鱼是其中的一种。 三文鱼有鱼所有的特征,除此之外,它还有一些区别于其它种类的鱼(比如比目鱼)的自己的特征。
  • 鱼可看作最大的一个类(父类),三文鱼就是鱼这个父类的一个子类。
  • 类——说明它不是具体存在的东西,它只是一个鱼这种生物的特征的抽象,三文鱼也是。

2 Mary和三文鱼的区别是什么?

  • 三文鱼里面包含很多条鱼,Mary只是其中的一只。Mary有三文鱼所有的特征,同时它也有鱼所有的特征,除此之外,它还有一些区别与其它三文鱼的自己的特征。
  • Mary可看作三文鱼这个子类的一个实例/对象,同时它也是鱼这个父类的实例/对象。
  • 对象/实例——它是具体存在的东西,它具有类的所有特征。

二 代码怎么写

1 识别类和对象的小技巧

首先,你需要学习两个信号词:“is-a”(是...)和“has-a”(有...)。当你表达对象和类的相互关系时,你用“is-a”。当你指对象和类相互引用时,你用“has-a”。

is-a 指的是鱼和三文鱼之间的关系,has-a 指的是三文鱼和鳃的关系。

2 关于类名object

可参考该博客:https://blog.csdn.net/qq_36556893/article/details/90770433

注意:链接中的文章是基于python 2.7.10版本,实际上在python 3 中已经默认就帮你加载了object了(即便你没有写上object)。如下表:

 
 
python 2.x python 2.x python 3.x python 3.x
不含object 含object 不含object 含object
__doc__ __doc__ __doc__ __doc__
__module__ __module__ __module__ __module__
say_hello say_hello say_hello say_hello
  __class__ __class__ __class__
  __delattr__ __delattr__ __delattr__
  __dict__ __dict__ __dict__
  __format__ __format__ __format__
  __getattribute__ __getattribute__ __getattribute__
  __hash__ __hash__ __hash__
  __init__ __init__ __init__
  __new__ __new__ __new__
  __reduce__ __reduce__ __reduce__
  __reduce_ex__ __reduce_ex__ __reduce_ex__
  __repr__ __repr__ __repr__
  __setattr__ __setattr__ __setattr__
  __sizeof__ __sizeof__ __sizeof__
  __str__ __str__ __str__
  __subclasshook__ __subclasshook__ __subclasshook__
  __weakref__ __weakref__ __weakref__
    __dir__ __dir__
    __eq__ __eq__
    __ge__ __ge__
    __gt__ __gt__
    __le__ __le__
    __lt__ __lt__
    __ne__ __ne__
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

3 关于super函数

参考:http://c.biancheng.net/view/2290.html

4 代码

 1 # Animal is-a object(yes, sort of confusing) look at the extra credit(附加练习)
 2 class Animal(object):
 3     pass
 4 
 5 # Dog is-a Animal
 6 class Dog(Animal):
 7     
 8     def __init__(self,name):
 9         # class Dog has-a instance variable:self.name.
10         self.name = name
11 
12 # Cat is-a Animal
13 class Cat(Animal):
14     
15     def __init__(self,name):
16         # class Cat has-a instance variable:self.name.
17         self.name = name
18 
19 # Person is-a Object
20 class Person(object):
21     
22     def __init__(self,name):
23         # class Person has-a instance variable:self.name.
24         self.name = name
25         
26         # class Person has-a pet of some kind
27         self.pet = None
28 
29 # Employee is-a Person
30 class Employee(Person):
31     
32     def __init__(self,name,salary):
33         # 调用第一个父类Person的构造方法,即self.name = name
34         # class Employee has-a instance variable:self.name.
35         super(Employee,self).__init__(name)
36         # class Employee has-a instance variable:self.salary = salary
37         self.salary = salary
38 
39 # Fish is-a object
40 class Fish(object):
41     pass
42 
43 # Salmon is-a Fish
44 class Salmon(Fish):
45     pass
46 
47 # Halibut is-a Fish
48 class Halibut(Fish):
49     pass
50 
51 # rover is-a Dog
52 rover = Dog("Rover")
53 
54 # satan is-a Cat
55 satan = Cat("Satan")
56 
57 # mary is-a Person
58 mary = Person("Mary")
59 
60 # mary has-a pet of Cat named satan
61 mary.pet = satan
62 
63 # frank is-a Employee,his name is Frank,his salary is 12000¥
64 frank = Employee("Frank",12000)
65 
66 # frank has-a pet of Dog named rover
67 frank.pet = rover
68 
69 # flipper is-a Fish
70 flipper = Fish()
71 
72 # crouse is-a Salmon
73 crouse = Salmon()

View Code

 
 
posted @ 2020-08-03 16:16  洛兰123  阅读(155)  评论(0编辑  收藏  举报