• Python面向对象的特点


    一、 面向三大特性

    1. 封装

    - 对函数进行封装

    同一类函数或同一类属性封装到一个类中   

    class DB
        def dbf1():
            pass
        def dbf2():
            pass
        def dbf3():
            pass
    
    class File:
        def file1()"
            pass
        def file2()"
            pass
        def file3()"
            pass
    View Code

        

    - 对数据进行封装

    函数特别多,可以将数据封装到对象中,并且可以加工

    def func1(a1,a2,a3,a4):
        pass
    
    def func2(a1,a2,a3,a4):
        pass
    
    -----------------------------------------------------------------------------------
    
    def func1(obj):
        pass
    
    def func2(obj):
        pass
    
    class Data:
        def __init__(self,a1,a2,a3,a4):
            self.a1 = a1
            self.a2 = a2
            self.a3 = a3
            self.a4 = a4
            
        def dbf1(self):
            return self.a1 + self.a2
    
    d1 = Data(11,22,33,44)
    
    
    obj1 =DATA(11,22,33,44)
    obj2 =DATA(44,55,66,77) 
    obj.a1
    obj.dbf1()
    View Code

    - 双层封装

    对于对象也可封装

    class Foo(object):
        def __init__(self,age,name):
            self.name = name
            self.age = age
    
    class Bar(object):
        def __init__(self,counter):
            self.counter = counter
            self.obj = Foo('18','alex')
    
    b1 = Bar(1)
    View Code

    2. 继承

    多个类中拥有共同的函数,抽象到父类中继承即可

    3. 多态

    继承父类的子类拥有多种形态的相同方法

    二、 加括号的四种形式

    函数,类,方法,对象

    def f1():
        print('f1'):
    
    class F2(object):
        pass
    
    class F2(object):
        def __init__(self):
            pass
        def ff3(self):
            print('ff3')
    
    class F4(object):
        def __init__(self):
            pass
        def __call__(self):
            print('f4')
    
    def func(arg):
        arg()
    
    # 函数,内部执行函数
    func(f1)
    
    # 类,内部执行__init__方法
    func(F2)
    
    # 方法
    # 实例化过程中执行__init__方法
    obj1 = F3()
    obj1.ff3
    func(obj.ff3)
    
    # 对象
    # 对象加括号直接执行类中的__call__方法
    obj2 = F4()
    func(obj2)
    View Code

    三、 常用下划线方法

    以下方法会在某个特定动作触发

    __init__,类加括号自动触发
    
    __call__,对象加括号自动触发
    
    __new__,new()是在新式类中新出现的方法,它作用在构造方法init()建造实例之前,在Python 中存在于类里面的构造方法init()负责将类的实例化,而在init()调用之前,new()决定是否要使用该init()方法,因为new()可以调用其他类的构造方法或者直接返回别的对象来作为本类 的实例。
    
    __setattr__,__getattr__,__delattr__,对象加点加方法触发
    
    __setitem__,__getitem____delitem__,对象加中括号自动触发
    
    __enter__
    
    __exit__
    
    __dict__
    
     __add__,对象相加的时触发
    View Code

    四、 metaclass

    - 类是由type创建,通过metaclass指定该类由谁来创建。

    class Foo(object):
        pass
    print(Foo)    # <class '__main__.Foo'>
    
    
    Bar = type('Foo',(object,),{})
    print(Bar)    #<class '__main__.AAA'>
    View Code

    - type的源码无法查看,但是类可以指定创建该类的类。

    class MyType(type):
        def __init__(self,*args,**kwargs):
            super(MyType,self).__init__(*args,**kwargs)
    
    class Foo(metaclass=MyType):
        pass
    View Code
  • 相关阅读:
    mybatis关键查询
    智能标签
    mybatis注解基础使用
    myBatis基础知识点
    Mybatis框架模糊查询
    python(7):sympy模块
    anaconda中的包如何传到pycharm中使用?
    python(6):Scipy之pandas
    python(5):scipy之numpy介绍
    python(4): regular expression正则表达式/re库/爬虫基础
  • 原文地址:https://www.cnblogs.com/yunweixiaoxuesheng/p/8917132.html
Copyright © 2020-2023  润新知