zoukankan      html  css  js  c++  java
  • Python类知识点

    Python类知识点

    继承顺序

    这也是Python2和Python3的一个区别!

    在Python2中分为经典类和新式类:

    • 经典类,从左到右,深度优先

      • class A:
            pass
        
    • 新式类,从左到右,广度优先

      • # 继承object的是新式类
        class A(object):
            pass
        

    在Python3中只有新式类,从左到右,广度优先。以下写法都正确,无论哪种写法,默认都是新式类:

    • 写法一

      • class A(object):
            pass
        
    • 写法二

      • class A():
            pass
        
    • 写法三

      • class A:
            pass
        
    • Python3多类继承例子:广度优先

      • class P1:
            def foo(self):
                print('p1-foo')
        
        class P2:
            def foo(self):
                print('p2-foo')
            def bar(self):
                print('p2-bar')
        
        class C1(P1, P2):
            pass
        
        class C2(P1, P2):
            def bar(self):
                print('C2-bar')
        
        class D(C1, C2):
            pass
        
        d = D()
        d.foo()  # 输出 p1-foo   D--C1--C2--P1
        d.bar()  # 输出 p2-bar   D--C2--C2
        

    __call__()方法

    实例化类对象的时候不会调用__call__()方法,如果在一个类中定义了__call__(),那这个类的实例可以被当做一个函数使用,仅此而已!

    例子:

    class A(object):
        def __init__(self, a, b):
            self.a = a
            self.b = b
    
        def func(self,):
            print("a = ", self.a, "b = ", self.b)
    
        def __call__(self, *args, **kwargs):
            self.a = args[0]
            self.b = args[1]
            print("call: a = ", self.a, "b = ", self.b)
    
    obj = A(10, 20)
    obj.func()
    
    obj(50, 60)  # obj对象被当做函数一样调用
    

    注意,只有在类中定义了__call__()才能这样用,否则报语法错误。

  • 相关阅读:
    HDFS上传下载API
    HDFS2.X新特性:HA和Federation联盟
    HDFS2.X架构及工作原理
    浅析Secondary NameNode与namenode
    Flink安装部署
    HDFS基本命令行操作与简单API实用
    Linux基础_Hadoop环境搭建必备
    HBase BlockCache机制讲解
    HDFS集群安装部署
    我亦未曾饶过岁月_面试总结
  • 原文地址:https://www.cnblogs.com/ldy-miss/p/13262500.html
Copyright © 2011-2022 走看看