zoukankan      html  css  js  c++  java
  • python类和对象-扩展

    1、为类或对象动态创建属性或方法

    2、__slots__ = ('name','age'),【实例】只能创建指定的属性属性或方法 ---新式类

    3、执行父类的构造函数的不同
    Father.__init__(self) --经典类
    super(Son,self).__init__() --新式类

    4、Person.__bases__ 只会显示一层继承的所有父类
    5、__call__
      __call__ 一个已经实例化的对象p,在调用p()
    6、python中一切都是对象,类本身也是对象,类是由type产生的。

    class Foo
      pass
    Bar = type('Bar',(object,),{'name':123,'Func':Hello})

    以上等同于

    class Bar:
        name = 'yangmv'
        def func(self):
            print 'go func'
    obj = Bar().func()


    既然这样,那么对于定义的类来说,只要定义了一个类,就调用一次 type类的构造函数,如何验证?

    7、__metaclass__  可以指定类是由那个type来产生的

    class MetaClass(type):
        def __init__(self,name,bases,dicts):
            print name
         
    class C1:
        __metaclass__ = MetaClass
         
    class C2:
        __metaclass__ = MetaClass

    8、__init__ __new__ __call__
    我们知道执行 f = Foo() 会默认执行构造函数 __init__
    实际上执行了:type('Foo',bases,dicts).__call__('Foo')

    class MetaClass(type):
         
        def __init__(self,name,bases,dicts):
            print name
        def __call__(self, *args, **kwargs):
            print self
            result = self.__new__(self, *args, **kwargs)
            print result
            type(result).__init__(result,*args,**kwargs)
            return result
             
    class C1:
        __metaclass__ = MetaClass
             
        def __init__(self):
            print 'c1.__init__'
            self.name = 'yangmv'
             
        def __new__(cls, *args, **kwargs):
            print cls
            print args
            print kwargs
            return object.__new__(cls, *args, **kwargs)
             
        def Hello(self):
            print 'hello'
    class C2:
        __metaclass__ = MetaClass
         
    #c = C1()
    c1 = object.__new__(C1)
    c1.Hello()

  • 相关阅读:
    python 多进程队列数据处理
    python mqtt 客户端实现
    elasticsearch 父子关系
    elasticsearch Mapping使用自定义分词器
    elk 解决浏览器跨域问题
    elasticsearch 英文数字组合字符串模糊检索
    elasticsearch 关联单词查询以及Shingles
    elasticsearch 分析器 分词器
    Leetcode: Binary Tree Postorder Traversal
    Leetcode: Binary Tree Preorder Traversal
  • 原文地址:https://www.cnblogs.com/yangmv/p/6217261.html
Copyright © 2011-2022 走看看