zoukankan      html  css  js  c++  java
  • 练习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

     
     
  • 相关阅读:
    react native ios 报错SyntaxError: Unexpected end of JSON input
    微信小程序父组件给子组件传参
    xcode10 Command PhaseScriptExecution failed with a nonzero exit code
    html中的video放置在微信上打开会全屏显示,并且丢失文件上的其他内容
    vue cli使用vue-awesome-swiper动画
    vue 使用swiper
    react native 配置leancloud推送 ios版
    iOS----------jenkins
    iOS----------学习路线思维导图
    iOS学习路线
  • 原文地址:https://www.cnblogs.com/luoxun/p/13426922.html
Copyright © 2011-2022 走看看