• python中类的设计问题(一些高级问题探讨,函数重载,伪私有,工厂模式,类方法等)


    从这里再次体现了python语言强大的灵活性。某些在高级语言中看似不严谨需要尽量避免的地方在python中都是允许的。

    比如:

    (1),异常可以用来处理错误

    (2),方法,类也都可以视为对象。

    (3),没有任何的类型声明

    可见,python中一切皆为对象,包括类,而类在C++,java中仅仅是编译器的输入而已。

    1,函数重载

    python因为没有类型声明,因此函数重载不能通过参数类型标记来实现。python中的多台是基于对象接口的,而不是类型。

     2,伪私有

    python的伪私有属性:所谓伪私有,是指这么做仅仅避免了实例内的命名空间冲突,而不是限制变量名的读取

    具体做法是,class语句内部有两个下划线,但是结尾没有两个下划线的变量名或者函数名,会自动扩张,从而包含了所在类的名称。比如:spam类中的__x这样的变量会自动变为_spam__x;

    3,绑定或者无绑定方法

    类进行点号运算得到无绑定方法,该方法对象必须传入明确的实例对象。

    对象进行点号运算得到绑定方法,可以直接传入参数进行调用

    class T:
        def x(self):
            print('test')
    
    if __name__=='__main__':
        a=T()
        #print(dir(T))
        #print(T.__dict__.keys())
        y=a.x
        y();
    
        z=T.x
        z(y)

    不过在3.0中,无绑定方法也不强制传入实例对象了

    多重继承:

    和c++、java等高级语言都不同

    python可以进行多重继承,搜索属性时,pthon会从左到右搜索类首行中的超类,知道找到相符者。  

    对于这一点,书上有一个很有用的打印类所有属性(包括从超类中继承的属性的方法),详见课本p768

    python实现工厂设计模式

    因为类也是对象,因此利用python实现工厂设计模式非常简单

    def factory(aClass,*args):
        return aClass(*args)

    第一个参数传入类名称,其他参数为类构造函数的参数即可

    函数装饰器,类方法和静态方法

    在python3.0中方法可以直接通过类名调用,视作不绑定方法,这就类似于了类方法。但是此时不能使用实例调用,因为默认实例将作为方法的第一个参数,而这样编写的类方法中没有参数可以接受

    对应的方式使用@staticmethod进行修饰,这样通过类和实例都可以进行调用。

    关于类装饰器和元类木有看懂,不过这些高级功能应当是对于工具编写者有用,对于程序员就没那么重要。

  • 相关阅读:
    python使用消息队列RabbitMq(入门)
    python Condition类(锁)
    python锁
    python多线程的几种情形分析-三种情况
    git基本使用
    python学习笔记之数据类型、字符编码、文件处理
    NOIP2018提高组模拟题(五)
    10.28模拟赛
    差分+树状数组【p4868】Preprefix sum
    线段树【p2706】贪婪大陆
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3337660.html
Copyright © 2020-2023  润新知