python 面向对象知识整理

python 面向对象

一、初识面向对象

  • 面向过程:根据业务逻辑从上到下写垒代码
  • 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
  • 面向对象:对函数进行分类和封装,让开发“更快更好更强…”

  面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。

类就是一个模板,模板里可以包含多个函数,函数里实现一些功能,对象则是根据模板创建的实例,通过实例对象可以执行类中的函数.

类成员:

  #字段 (也称为:属性) 静态字段 属于类 执行 既可以通过对象访问,也可以通过类访问
普通字段 属于对象 执行只能通过对象访问 (即:定义在 __init__方法中的字段)

  #方法
   普通方法 保存在类中,需创建对象,由对象来调用      参数self 代指=>>调用对象
   静态方法   保存在类中,不需创建对象,由类直接调用,加@staticmethod装饰器,不需要传self参数
      类方法       保存在类中,由类直接调用,加@classmethod装饰器,需传递参数,约定俗成的self参数写法cls 代指=>> 当前类的类名

对于静态方法中不需要传递self参数的情况,对比记忆必须传递self参数的,子类继承父类方法时的除了super方式外的第二种方式:fathor.func(self)

二、面向对象的三大特性

1.继承

 

  面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。

 

需要注意的地方:继承语法 class 派生类名(基类名): 基类名写在括号里,基本类是在类定义的时候,在元组之中指明的。

 

在python中继承中的一些特点:

 

  1:在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。

 

  2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数

 

  3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。

 

如果在继承元组中列了一个以上的类,那么它就被称作"多重继承" 。

继承有两种用途:

  一:继承基类的方法,并且做出自己的改变或者扩展(代码重用)  

  二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能。

2封装

  1、在面向对象中,所有的类通常情况下很少让外部类直接访问类内部的属性和方法,而是向外部类提供一些按钮,对其内部的成员进行访问,以保证程序的安全性,这就是封装 
  2、在python中用双下划线的方式实现隐藏属性,即实现封装 
  3、访问控制符的用法___包括两种:在类的内部与在类的外部 
    1>在一个类的内部,所有的成员之间彼此之间都可以进行相互访问,访问控制符__是透明的,失效的 
    2>在一个类的外部,通过_类名_对象的方式才可以访问到对象中的_成员 
    综上:内部之间可以直接访问,在类的外部必须换一种语法方式进行访问 
  4、在python当中如何实现一个隐藏的效果呢?答案:在Python里面没有真正意义上的隐藏,只能 
从语法级别去实现这件事。 
  5、在子类定义的__x不会覆盖在父类定义的__x,因为子类中变形成了:子类名__x,而父类中变形成了:父类名__x,即双下滑线开头的属性在继承给子类时,子类是无法覆盖的 

 

 

3多态

  所谓多态指的是一个父类的引用既可以指向父类的对象,也可以指向子类的对象,它可以根据当前时刻指向的不同,自动调用不同对象的方法,这就是多态的概念。(当然,Python中的多态没必要理解的这么复杂,因为Python自带多态的性能) 

2、多态性依赖于同一种事物的不同种形态 
3、Python是一门弱类型的语言,所谓弱类型语言指的是对参数没有类型限制,而这是我们可以随意传入对象的根本原因 
示例程序:

 

#!/usr/bin/python
# -*- coding:utf-8 -*-


#模拟Java中接口的概念
class People:
    def fun(self):
        print("1111")

class Student(People):
    def fun(self):
        print("2222")

class Teacher(People):
    def fun(self):
        print("3333")

def g(aa):
    aa.fun()

if __name__ == '__main__':
    print("只要传入的对象是people的子类即可")
    g(People())
    g(Student())
    g(Teacher())

 

 

三、

更多信息請點這裏

 

猜你喜欢

转载自www.cnblogs.com/ltk-python/p/9260326.html