《笨办法学Python》 第45课手记

《笨办法学Python》 第45课手记

本节课将对象和类以及他们之间的从属关系。

本学期刚开始学数据结构,贴一些相关的概念:

从整个计算机科学的角度来说,对象是对客观事物的抽象,类是对对象的抽象。类和对象都是一种抽象的数据类型。

对象:是指在应用问题中出现的各种实体、事件和规格说明等,它是由一组属性和在这组值上的一组服务(这里的服务指的是操作,就是我们写在类里的函数所提供的功能,本文作者注)构成的,其中属性值确定了对象的状态。

:把具有相同属性和服务的对象归到同一类,而把一个类中的的每一个对象称为该类的一个实例,他们具有相同的服务。

继承:面向对象方法最有特色的方面。

继承性(Inheritance)是指,在某种情况下,一个类会有“子类”。子类比原本的类(称为父类)要更加具体化。(该段不是书中内容,为作者添加)

原代码如下:

## Animal is-a object(yes, sort of confusing)look at the extra credit

class Animal(Object):
    pass

## Dog is-a class
class Dog(Animal):
    def __init__(self,name)
        ##Dog has-a object
        self.name = name

## Cat is-a class
class Cat(Animal):

    def __init__(self,name):
        ## Cat has-a object
        self.name = name

## Person is-a class
class Person(object):

    def __init__(self,name)
        ## Person has-a object
        self.name = name

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

## Employee is-a class
class Employee(Person):

    def __init__(self, name, salary)
        ## Employee inherit Person hmm what is this strange magic?
        super(Employee, self).__init__(name)
        ## person has-a salary
        self.salary = salary

## Fish is-a object
class Fish(object):
    pass

## Salmon is-a class
class Salmon(Fish)
    pass

## Halibut is-a class
class Halibut(Fish)
    pass


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

## satan is-a Cat
satan = Cat("Satan")

## mary is-a Person
mary = Person("Mary")

## mary has-a pet
mary.pet = satan

## frank is-a Employee
frank = Employee("Frank", 120000)

## frank has-a pet
frank.pet = rover

## flipper is-a Fish
flipper = Fish()

## crouse is-a Salmon
crouse = Salmon()

## harry is a Halibut
harry = Halibut()

通过这段代码,我们得记住,类既可以在对象上定义,也可以在其他类上定义(体现继承性)。

本节课涉及的知识

super(Employee, self).__init__(name)

super函数是在Python2.2后被添加的函数,用来实现类的继承。

 super(type[, object-or-type])
  Return the superclass of type. If the second argument is omitted the super object
  returned is unbound. If the second argument is an object, isinstance(obj, type) 
  must be true. If the second argument is a type, issubclass(type2, type) must be 
  true. super() only works for new-style classes.
  A typical use for calling a cooperative superclass method is:
   class C(B):
       def meth(self, arg):
           super(C, self).meth(arg)
  New in version 2.2.

super(B, self).init()是这样实现继承的:super(B, self)首先找B的父类(就是类A),然后把类B的对象self转换为类A的对象,然后被转换后的类A对象调用自己的init函数。

super 这种用法只有指明子类的机制,虽然是一种解决缺陷的办法但是可能也存在问题。而多继承类定义中有其他的方式,我们以后碰到再讲。

更详细的讲解在这里: http://www.jb51.net/article/66912.htm

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏coding

浅析python中的元类类也是对象动态地创建类用type创建类 metaclass属性元类到底有什么用

在python中,一切皆是对象,就连生成对象的类,自身也是一个对象。既然类也是一个对象,那么类也可以被作为参数传递,也可以赋值给其他变量...

17630
来自专栏小灰灰

Guava之 Joiner & Splitter

Guava字符串拼接工具类 Joiner和Splitter 算是一个比较有意思的工具类了,可以实现字符串的分割和容器的拼接 具体的使用还是比较简单的,给个例子就...

21670
来自专栏everhad

使用通配符和泛型:完成父子类关系的List对象的类型匹配

使用泛型和通配符都可以让一个方法所表示的算法逻辑适应多种类型。 Java中具备继承关系的类A、B(A extends B)它们的集合List<A>和List<...

12400
来自专栏python3

python 面向对象之静态方法

通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过...

8320
来自专栏java 成神之路

获取当前执行代码的类、方法、行数信息

19320
来自专栏mathor

C++STL中map的使用策略(一)

30230
来自专栏肖洒的博客

继承和多态

这里继承和多态的概念与java的概念差不多。概念还是需要多次理解才能透彻。感觉类和实例的概念还是不能深刻理解。再次复习下吧。

7530
来自专栏10km的专栏

java:bytes[]转long的三种方式

bytes[] 到数字类型的转换是个经常用到的代码,解决方式也不止一种,最近需要将bytes[]转为long,有机会深入了解了一下,此文做个总结。 java代码...

70670
来自专栏mySoul

设计模式 里氏替换原则

在场景中,三毛需要什么枪支,就直接new 出一个枪支即可,然后其内通过抽象类获取到对象,然后对齐进行修饰

14360
来自专栏小灰灰

java之通过反射生成并初始化对象

java之通过反射生成并初始化对象 在博文 《java之的读取文件大全》 中读取csv文件后,需要自己将csv文件的对象转为自己的DO对象,那么有没有办法我...

1.3K60

扫码关注云+社区

领取腾讯云代金券