Python面向对象

#最近在根据廖雪峰老师的python学习课程学习,以下是在学习过程中做的一些学习总结

1、面向对象简介

  在一个python程序中会存在很多的函数,多个函数组成一个类,多个类构成一个程序。

  类(class):一个具有相同方法和属性的集合。

  通过class来声明一个类,类名呢首字母需要大写

  数据成员:类变量、实例变量

  继承:即一个新类继承一个现有的class,被继承的被称为父类、基类、超类(base class 、super class)

  方法:类中定义的函数

  对象:类定义的属性和方法;对象是类的实例

2、创建一个类

class ClassName(object):    
    pass

  (object) 表示该类是从哪一类继承下的,如果没有合适继承的类,则可以使用object,这是所有类最终都会继承的类。

   实例:

class ClassName(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def print_init(self):
        print('%s :%s' % (self.name,self.age))

  1、__init__:是一种特殊方法,他并不执行而是为ClassName类设置一个必须的属性

  2、print_init():是ClassName的一个方法

  运行

>>>bart = Student('bart',25)
>>>bart.name
'bart'
>>>bart.age
25

  3、当__init__执行时实例就已经创造,bart就是一个实例

3、继承

  比如我们已经有了一个类

class Animal(object):
    def func(self):
        print('Animal')

  我们还需要编写其他类时:

class Dog(Animal):
    pass
class Cat(Animal):
    pass

  我们新创建的子类,也就是Dog,Cat,如果我们运行会出现什么?

>>>dog=Dog()
>>>dog.run()
Animal
>>>cat=Cat()
>>>cat.run
Animal

  子类继承父类的所有方法。虽然子类没有定义方法,但是父类定义了run()方法,所以子类也同样具有run方法。

  当然,我们也可以对子类进行一些修改:

class Dog(Animal):
    def run(self):
        print('Dog')
class Cat(Animal):
    def run(self):
        print('Cat')

  我们在子类中声明一个run()方法,再次运行:

>>>dog=Dog()
>>>dog.run()
Dog
>>>cat = Cat()
>>>cat.run()
Cat

  可以看出执行了子类中定义的方法。当子类和父类都存在run()方法时,子类的方法覆盖了父类,在代码运行时总会调用子类这样就构成了多态

4、多态

  什么是多态呢?多态就是只要是继承父类或其子类的,该方法就会自动调用父类定义的方法

class Animal(object):
    def run(self):
        print('Animal is running')
def run_twice(animal):
    animal.run()
    animal.run()

  当我们运行run_twice()函数并调用父类方法:

>>>run_twice(Animal)
Animal is running
Animal is running

  你会发现任何依赖Animal的函数或方法都可以不用修改的运行,就是因为多态。

  python作为一个动态语言不一定需要传入Animal类型,我们只需要保证对象有一个run()方法即可;这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。

  

原文地址:https://www.cnblogs.com/twlr/p/12295979.html