• Python类基础知识(面向对象基础)


    首先


    我们需要了解

    1. 面向过程是什么
    2. 面向对象是什么
    3. 我们为什么需要使用面向对象

    面向过程:根据业务逻辑从上到下写垒代码

    面向对象:根据代码对函数进行分类和封装

    区别:解决问题的逻辑不同,但是都能解决问题。新手在一开始可能比较习惯使用面向过程的编程,因为比较容易理解;面向对象在一开始理解起来是有一定的难度的,但是在熟练了之后就会爱上这种方式的编程


    面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)

    创建类和对象

    面向对象编程是一种编程方式,此编程方式需要使用'类'和'对象'来实现,所以面向对象也可以说是对'类'和'对象'的使用

    • 类 即模板,模板里面有很多函数,函数里实现所需要的功能
    • 对象 即实例,通过实例对象可以之执行类中的函数

    `**创建一个类**
    class Foo(object):
    	def Bar(self):
    	    print('in the BAR')
    	def Hello(self, name):
        	print(i am %s' %name)
    **#根据类FOO实例对象obj**
    obj = FOO() #实例化
    obj.BAR()	#执行BAR方法
    obj.Hello('miao') #执行Hello方法`
    

    面向对象的三大特性

    ##封装 继承 多态
    

    一、封装

    封装,也就是将内容封装到某个地方,然后再去调用

    avatar
    self 是一个形式参数,
    当执行 obj1 = Foo('wupeiqi', 18 ) 时,self 等于 obj1
    当执行 obj2 = Foo('alex', 78 ) 时,self 等于 obj2
    所以,内容其实被封装到了对象 obj1 和 obj2 中,每个对象中都有 name 和 age 属性,在内存里类似于下图来保存。
    avatar

    二、继承

    继承,面向对象中的继承和现实生活中继承相同,即:子可以继承父的内容
    下面代码简单演示类的继承

    class Father(object):
        def __init__(self,home):
            self.home = home
        def tell(self):
            print('My home is %s ' %self.home)
    class Son(Father):
        def __init__(self,name,wife,home):
            self.wife = wife
            self.home = home
        def xifu(self):
            print('xifu is %s'%self.wife)
    s1=Son('xiaoming','mazi','bieshu')
    s1.xifu()
    s1.tell()
    

    父类是Father,在创建子类的时候直接将Father当做参数传给Son类
    调用武sir的一张图可以看的更加清晰:
    注:父类基类 子类派生类 只是叫法不同罢了
    avatar
    然而刚在我们进行的是单继承,多个继承的时候该怎么做呢
    思考:

    • 怎么继承多个类呢
    • 如果继承的多个类中定义了相同的方法,那么会调用哪一个
      1、Python可以继承多个类,class(A,B)这样既可
      2、Python继承多个类时,寻找方法的方式有两种,分别是:深度优先(经典类)、广度优先(新式类)
      avatar
      从写法上区分的话,如果 当前类或者父类继承了object类,那么该类便是新式类,否则便是经典类。
      avatar
      avatar

    在日后的写法中我们默认使用新式类就好

    三、多态

    多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

    总结的话就是接口的重用

    #Author : Ziang Chen
    # _*_coding:utf-8_*_
    class Animal(object):
    	def __init__(self, name):  # Constructor of the class
        	self.name = name
    	def talk(self):  # Abstract method, defined by convention only
        	raise NotImplementedError("Subclass must implement abstract method")
    class Cat(Animal):
    	def talk(self):
    	    print('%s: 喵喵喵!' % self.name)
    class Dog(Animal):
    	def talk(self):
    	    print('%s: 汪!汪!汪!' % self.name)
    def func(obj):  # 一个接口,多种形态
    	obj.talk()
    c1 = Cat('小晴')
    d1 = Dog('李磊')
    func(c1)
    func(d1)
  • 相关阅读:
    HDU4529 郑厂长系列故事——N骑士问题 —— 状压DP
    POJ1185 炮兵阵地 —— 状压DP
    BZOJ1415 聪聪和可可 —— 期望 记忆化搜索
    TopCoder SRM420 Div1 RedIsGood —— 期望
    LightOJ
    LightOJ
    后缀数组小结
    URAL
    POJ3581 Sequence —— 后缀数组
    hdu 5269 ZYB loves Xor I
  • 原文地址:https://www.cnblogs.com/czalinux/p/6668383.html
Copyright © 2020-2023  润新知