zoukankan      html  css  js  c++  java
  • python 面向对象(一)

    一、创建类和对象                                            

    #编写一个类
    class Func:                       #定义了一个类
        def __init__(self,name):   # 构造方法
            self.name = name
        def f1(self):                 #在类中编写了一个方法
            pass
    #执行类中方法的流程:
        obj = Func("Tom")       #实例化一个对象
        obj.f1()                        #通过这个对象调用方法

     如何归类:
         正向:归类+提取公共值
       反向:类的相关功能+提取公共值

    构造方法:

    class Person:
        def __init__(self, name, age, gender):
            self.name = name
            self.age = age
            self.gender = gender
    obj = Person("Tom", 20, "")


      1.构造方法目的是将数据进行初始化。
      2.应用:
        1.将数据封装到对象中,以供自己在方法中调用。
        2.将数据封装到对象中,以供其他函数调用。

    self

      self是一个形式参数,当实例化一个对象 obj = Foo()时,self 就等于 obj

    二、面向对象的三大特性:封装/继承/多态            

    1.封装  


    1.将相关功能封装到一个类中

    class Message:
    def emall(self):
    pass
    def mage(self):
    pass
    def wechat(self):
    pass

    2.将数据封装到一个对象中

    #继承编写:
    class A:         #父类/基类
        def f1(self):
            print("A1")
    
        def f3(self):
            print("A3")
    
    class B(A):     #子类/派生类
        def f1(self):
            print("B1")
    
        def f2(self):
            self.f3()
            print("B2")
    
    obj = B()
    obj.f2()

    原则:在自己类中找,没有就去父类找。

    多继承

      python支持多继承,(父类1,父类2)先找左边。

    class A:
        def f1(self):
            print("A1")
        def f3(self):
            print("A3")
    
    class B:
        def f1(self):
            print("B1")
        def f2(self):
            self.f1()
            print("B2")
    
    class C(A,B):
        def func(self):
            self.f2()
            print("func")
    
    obj = C()
    obj.func()

      多继承提高代码重用性。

    补充:

      经典类和新式类

        python2 中 有经典类和新式类,如果自己或自己的基类中有人继承了object,那就是新式类,如果没有人继承就是经典类

        python3中没有了经典类和新式类之分,只有新式类,如果类没有继承的父类,则自动继承object

      经典类和新式类的查找顺序

        经典类:深度优先

        新式类C3算法

      C3算法:

    class A(object):
        pass
    class B(A):
        pass
    class C(A):
        pass
    class D(B, C):
        pass
    obj = D()
    #D类的查找顺序:L(D) = (D,B,A,object) + (D,C,A,object)
    #D,B,C,A,object

    print(D.__mro__)

        原理:获取第一个表头,和其他表尾巴进行比较,不存在则拿走,如果存在则放弃,然后获取第二个表的表头,再次和其他表的表尾进行比较。

      __mro__ :也可以使用__mro__ 方法,来查看查找顺序。

      注意事项:

        super是遵循了__mro__执行顺序

       


    3.多态   


      多种形态或多种状态
      鸭子模型,只要可以嘎嘎叫就是鸭子
      由于python原生支持多态,所以没有特殊性

    class Foo1:
        def f1(self):
            pass
    
    class Foo2:
        def f1(self):
            pass
    
    class Foo3:
        def f1(self):
            pass
    
    def func(arg):
        arg.f1()
    
    obj = Foo1()  # obj= Foo2()   obj = Foo3()
    func(obj)


  • 相关阅读:
    Tab支持的DHTML Window控件
    仿新浪游戏频道js多栏目全屏下拉菜单导航条
    Jquery实现超酷的时间轴特效
    DIV+CSS专题:第一天 XHTML CSS基础知识
    网站建设:详解网页扁平化设计
    简洁的支持展开关闭的tab标签代码
    JS总结
    codevs 1296 营业额统计 (splay 点操作)
    codeforces gym 100357 H (DP 高精度)
    codeforces gym 100357 K (表达式 模拟)
  • 原文地址:https://www.cnblogs.com/JinMuBaoBao/p/9544622.html
Copyright © 2011-2022 走看看