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
    

     

  • 相关阅读:
    利用wsdl.exe自动将wsdl文档转换为C#代码
    VS2008中C#开发webservice简单实例
    VS2012环境下C#调用C++生成的DLL
    VS2012 C#生成DLL并调用
    .NET在VS2008中生成DLL并调用
    面试题----寻找比一个N位数大的“下”一个数
    VS2008生成DLL并使用
    VS2008 生成静态链接库并使用
    一天一道练习题--2014年3月8日19:35:07
    C/C++中extern关键字详解
  • 原文地址:https://www.cnblogs.com/momo8238/p/7266132.html
Copyright © 2011-2022 走看看