zoukankan      html  css  js  c++  java
  • 人类的起源-类是从哪里来的-一脸懵逼

    1. python中一切皆对象(实例),运行结果说明:f 是由Foo创建而来的实例;Foo 是由type创建而来的实例

    class Foo(object):
        def __init__(self,name):
            self.name=name
    
    f=Foo("Lily")
    print(type(f))
    print(type(Foo))
    

     运行结果:

    <class '__main__.Foo'>
    <class 'type'>
    

    2. 创建类的另外一种方法:

    def func(self):
        print("hello Lily")
    Foo=type('Foo',(),{'talk':func})  #这里的func,指的是它的内存地址
    f=Foo()
    f.talk()
    print(type(Foo))
    

     运行结果:

    hello Lily
    <class 'type'>
    

     3.含有参数的情况:

    def func(self):
        print("hello Lily")
    
    def __init__(self,name,age):
        self.name=name
        self.age=age
    
    Foo=type('Foo',(object,),{'talk':func,"__init__":__init__})
    f=Foo("Lily",29)
    f.talk()
    

     运行结果:

    hello Lily
    <class 'type'>
    

    4 metaclass--类是怎么创建的.

    1) 在实例化的时候,__new__也会执行,而且会先于__init__执行。

    2)通过__new__ 函数调用__init__, 实际上是通过__new__来实例化的。实例化的时候是通过__new__  来触发__init__的。

         __new__是用来创建实例的。已经封装到类里了。可用于在实例化之前定制一些功能。

    class Foo(object):
        #metaclass = MyType
        def __init__(self,name):
            self.name = name
            print("Foo __init__")
    
        def __new__(cls, *args, **kwargs):  #相当于重构了new方法,阻断了父类new方法的执行,所以必须要再继承一次父类的new方法
            print("Foo __new__",cls, *args, **kwargs)
            return object.__new__(cls)  #去继承父类的__new__方法
    
    f = Foo("Alex")
    print(f.name)
    

     运行结果:

    Foo __new__ <class '__main__.Foo'> Alex
    Foo __init__
    Alex
    

     

  • 相关阅读:
    HYSBZ 3813 奇数国
    HYSBZ 4419 发微博
    HYSBZ 1079 着色方案
    HYSBZ 3506 排序机械臂
    HYSBZ 3224 Tyvj 1728 普通平衡树
    Unity 3D,地形属性
    nginx 的naginx 种包含include关键字
    Redis 出现NOAUTH Authentication required解决方案
    mysql 8.0出现 Public Key Retrieval is not allowed
    修改jar包里的源码时候需要注意的问题
  • 原文地址:https://www.cnblogs.com/momo8238/p/7266132.html
Copyright © 2011-2022 走看看