zoukankan      html  css  js  c++  java
  • 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()方法即可;这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。

      

  • 相关阅读:
    LeetCode【125. 验证回文串】
    LeetCode【122. 买卖股票的最佳时机 II】
    LeetCode【121. 买卖股票的最佳时机】
    LeetCode【119. 杨辉三角 II】
    LeetCode【118. 杨辉三角】
    LeetCode【112. 路径总和】
    PAT1024
    PAT1020
    PAT1018
    PAT1017
  • 原文地址:https://www.cnblogs.com/twlr/p/12295979.html
Copyright © 2011-2022 走看看