一 对象和类的区别
具体内容可见: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