zoukankan      html  css  js  c++  java
  • python语言基础语法笔记<note3--面向对象编程>

    Python面向对象编程(OOP)

    一、面向对象过程的优点特征:

    封装

    1 模型的特征和能力打包在一起
    2 模型的改变由模型自身完成
    3 隐藏模型的细节,外界只能使用,不能改变

    继承

    1 符合自然界分类规律
    2 快速实现代码重用
    3 符合现实世界中事物的特征

    多态

    1 子类可以继承父类的特征与能力
    2 还可以通过自定义来修改其特征与能力
    3 鸭子模型:
    4          只要具有使用者的属性或能力便可以使用
    5          |==>其他语言需要通过接口来实现
    6                 不同类,相同方法
    7                  相同类,不同方法

    组合

    1 一个模型可以由其他模型组成

    二、类的具体实现和特征

    1、类的定义

    1 class TextClass:
    2        pass

    在python3中默认继承object父类

    #python2默认为经典类,显式引用object类为新式类

    #python3默认为新式类,不用显式引用object类

    !!!!!

    经典类继承为深度优先

    新式类继承为广度优先

    2、类的特征,能力,描述

    【1】能力==>体现在方法上,类具有能动性

    【2】特征属性,是具有自身包含或知道的模型

    3、类的实例化

    1 前面定义了TestClass类
    2 接下来实例化
    3 A=TestClass()

    【1】与类的关系:定义类就是建立模型(就像是印章,模子)

                         实例就是产生真实的模型产品(产品)

    【2】实例化步骤

       (1)‘__new__()'方法创建实例

    自动从object继承

       (2)’__init__()'方法初始化实例

    若是定义了,则从定义的'__init__'开始使用定义了的(就是方法的重载)

    若是没有定义,则使用继承自object类的‘__init__'方法

    4、添加类的说明

    在类名的下一行用三引号标出

    “”“
         docstring
                       ”“”

    这就是类的说明文档

    类的文档查看:

    >>>help(A)

    #A为要查看的类名

    >>>A.__doc__

    5、类的特征描述

    【1】实例属性

      类被实例化才具有的属性

      一般在'__init__'()方法中创立并实例化

      直接使用即定义:self.<属性名>

        <1>在类内定义属性(定义类的时候)

        <2>在类外定义属性(在实例化以后)

        !注意:相同类的不同实例具有不同的属性值

       备注:一般不建议在__init__()方法外定义,创建和初始化实例,

                   一般不推荐类外定义和修改,修改可以单独定义方法

     【2】类属性

        类属性使得相同类的不同实例具有相同的变量

        >>引用方法:类名.属性

     【3】类的私有属性

        ‘__'开头的变量名加以标志,只有类对象自己能访问。(内部实现时会自动改变变量名)

        ’__init__()'    初始化类的方法            ’__doc__'    类的说明文档

        ‘__dict__'    实例属性和值                 ’__module__'     类所在的模块

        ‘__base__'  父类

    【4】深入类的属性

    同名的类属性与实例属性,

    1)以<类名>.属性名   引用时只能引用类属性

    2)以<实例名>.属性名   引用时只能引用实例属性

     1 In [54]: class text:
     2     ...:     a=4
     3     ...:     def __init__(self,b=4):
     4     ...:         self.b=b
     5     ...:         
     6 
     7 In [55]: c=text()
     8 
     9 In [56]: c.a
    10 Out[56]: 4
    11 
    12 In [57]: c.b
    13 Out[57]: 4
    14 
    15 In [58]: text.a
    16 Out[58]: 4
    17 
    18 In [59]: text.b
    19 ---------------------------------------------------------------------------
    20 AttributeError                            Traceback (most recent call last)
    21 <ipython-input-59-cc1e79bff36f> in <module>()
    22 ----> 1 text.b
    23 
    24 AttributeError: type object 'text' has no attribute 'b'

    【5】属性访问的特殊方法(反射)

    工具函数:1)hasatter(obj_name,"属性名")      测试是否具有类的属性

                      2)setattr(obj_name,"属性名")       设置属性

                      3)getattr(obj_name,"属性名"            取属性

    【6】属性的包装

    将方法包装成属性,以隐藏相关实现:1)控制属性的类型和范围   2)虚拟属性由其他属性处理后得来

    三种属性包装操作:

    1)@property                 可读

    2)@<property-name>.setter   可写

    3)@<property-name>.delter    可删

    下两个必须有第一个包装

    包装产生虚拟包装

    【7】描述符

    用来拦截和控制属性访问并可以重复使用

    将实现特殊协议方法额类

     1 协议方法:
     2 __get__( )
     3 __set__( )
     4 __delete__( )
     5 分类:
     6 数据描述符(实现全部协的名法了
     7 非数据描述符( 实现部各十协议方法)
     8 说明: 所有关成员正数都是非海据描达符
     9 描述符必须作为另一个类的类属性,
    10 
    11 同名的实创剧性和非数推描述条(以方法为例
    12 优先级
    13 def pr():
    14         print('..............')
    15 >>>t.pr=10
    16 >>>t.pr
    17 >>>10
    18 >>>del  t.pr
    19 >>>t.pr
    20 
    21 
    22 注意,只能在新成类中使用
    23 _call__()让类的实例如函数一样可调用
    24 类的继承与重载
    25 继承的特点:
    26 减少代码和灵话定到新类
    27 子类具有父类的属性和方法
    28 子类不能细继承父类的手有剧性3 法
    29 子类可以添加后的方说
    30 子类可以修改又类的乡法

    6、类的方法

    【1】类方法定义

        类似面向过程中的函数定义方法

        第一个参数总是self

    1 def  Foo(self,a):
    2       self.a=a
    3       print(self.a)

     【2】类方法的调用

       <1>类的内部调用:self.<方法名>(参数列表)

       <2>类的外部调用:<实例名>.<方法名>(参数列表)

     【3】构造方法    ’__init__()'      初始化实例

              实例化步骤:1、‘__new__()' 定义新的实例      2、’__init__' 初始化实例

    >>>>>>>>>>>>>>未完待续2018-03-04<<<<<<<<<<<<<<<

    >>>>>>>>>>>>> 更新2018-03-08<<<<<<<<<<<<<<<<<<<<

    【4】类的特殊方法

    类也是一个对象,但是具有创建其自身实例的能力

    类可以把它作为函数的参数传送

    【5】元类:类的创建和管理者

    所有的类都是元类(type)的实例

    >>>Test = type("Test",(),{'age':13,'name':"wangbo"})

    【6】自定义元类

    目的:对其创造的类进行预处理

    继承type类

    步骤:1)定义‘__init__'方法

    在使用自定义元类的时候:__metaclass__ =Myclass  #指定元类

    所有定义的为Myclass元类的子类

    【7】类的特殊方法

    构造序列:

    __len__      __getitem__(self,key)                  __setitem__(self,key,value)          __delitem__(self,key)

    构造迭代器

    __iter__(self)   定义迭代方式                 __next__(self)

  • 相关阅读:
    VWG中设置URL编码的方法
    wordwrap breakword
    iis6下配置支持.net4.0&发布网站[转]
    MySQL修复打不开的视图定义
    DHTML CSS+JavaScript设计网页链接提示ToolTips
    C# 计算文件的MD5值
    .Net+IIS环境经常出现的问题及排障[转]
    我的WCF之旅(1):创建一个简单的WCF程序[转]
    C#嵌套类的使用方法及特性[转]
    设置<table>的固定长度
  • 原文地址:https://www.cnblogs.com/BlogOfMr-Leo/p/8505191.html
Copyright © 2011-2022 走看看