面向对象学习总结

面向对象编程可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率 ,另外,基于面向对象的程序可以使它人更加容易理解你的代码逻辑,从而使团队开发变得更从容。

***、创建类与对象

类就是一个模板,模板里可以包含多个函数,函数里实现一些功能    

对象则是根据模板创建的实例,通过实例对象可以执行类中的函数

 

一、面向对象的三大特性:封装

就是将内容封装到某个地方,以后再去调用被封装在某处的内容。

将内容封装到某处

从某处调用被封装的内容

 

扫描二维码关注公众号,回复: 5927497 查看本文章

(1)通过对象直接调用

class Foo:

    def __init__(self, name, age):

        self.name = name

        self.age = age

obj1 = Foo('wupeiqi', 18)

print (obj1.name) # 直接调用obj1对象的name属性

print (obj1.age) # 直接调用obj1对象的age属性

obj2 = Foo('alex', 73)

print (obj2.name) # 直接调用obj2对象的name属性

print (obj2.age) # 直接调用obj2对象的age属性

  

(2)、通过self间接调用被封装的内容

class Foo:

    def __init__(self, name, age):

        self.name = name

        self.age = age

    def detail(self):

        print (obj1.name) # 直接调用对象的name属性

        print (obj1.age) # 直接调用对象的age属性

obj1 = Foo('wupeiqi', 18)

Obj1. detail()

 # Python默认会将obj1传给self参数,即:obj1.detail(obj1),所以,此时方法内部的 self = obj1, 即:self.name 是 wupeiqi ;self.age 是 18

obj2 = Foo('alex', 73)

Obj2. detail()

  

二、 面向对象的三大特性:继承

将多个类共有方法提取到父类,子类仅需继承父类而不必一一实现每个方法

注:除了子类和父类的称谓,你可能看到过 派生类 和 基类 ,他们与子类和父类只是叫法不同而已。

 

多继承呢?是否可以继承多个类?

如果继承的多个类每个类中都定了相同的函数,那么那一个会被使用呢?

1、Python的类可以继承多个类,Java和C#中则只能继承一个类

2、Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是

 

当类是经典类时,多继承情况下,会按照深度优先方式查找

当类是新式类时,多继承情况下,会按照广度优先方式查找

当前类或者父类继承了object类,那么该类便是新式类,否则便是经典类

 

 

三、 面向对象的三大特性:多态

  • 多态指的是一类事物有多种形态:动物有多种形态:人,狗,猪

Pyhon不支持Java和C#这一类强类型语言中多态的写法,但是原生多态,其Python崇尚"鸭子类型"。

Python崇尚鸭子类型,即'如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子'

  • python程序员通常根据这种行为来编写程序。例如,如果想编写现有对象的自定义版本,可以继承该对象
  • 也可以创建一个外观和行为像,但与它无任何关系的全新对象,后者通常用于保存程序组件的松耦合度。

在Python中,以下划线开头的变量名和方法名有特殊的含义,尤其是在类的定义中。用下划线作为变量名和方法名前缀和后缀来表示类的特殊成员:

  • _xxx:受保护成员,不能用'from module import *'导入;
  • __xxx__:系统定义的特殊成员;
  • __xxx:私有成员,只有类对象自己能访问,子类对象不能直接访问到这个成员,但在对象外部可以通过"对象名._类名__xxx"这样的特殊方式来访问。
  • 一:我们定义的类的属性到底存到哪里了?有两种方式查看
  • dir(类名):查出的是一个名字列表
  • 类名.__dict__:查出的是一个字典,key为属性名,value为属性值
  • 二:特殊的类属性
  • 类名.__name__# 类的名字(字符串)
  • 类名.__doc__# 类的文档字符串
  • 类名.__base__# 类的第一个父类(在讲继承时会讲)
  • 类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)
  • 类名.__dict__# 类的字典属性
  • 类名.__module__# 类定义所在的模块
  • 类名.__class__# 实例对应的类(仅新式类中)

3. __init__

构造方法,通过类创建对象时,自动触发执行。

4. __del__

  析构方法,当对象在内存中被释放时,自动触发执行。

注:此方法一般无须定义,因为Python是一门高级语言,

猜你喜欢

转载自www.cnblogs.com/daydayup12138/p/10726770.html