• python原类、类的创建过程与方法


    今天为大家介绍一下python中与class 相关的知识……

    获取对象的类名

    python是一门面向对象的语言,对于一切接对象的python来说,咱们有必要深入的学习与了解一些知识
    首先大家都知道,要获取一个对象所对应的类,需要使用class来进行检索。
    但如果我们只是一个简单的赋值语句,能这么使用么?让我们看下下面的代码:

    num=10
    string='abc'
    class MainClass:
        pass
    p=MainClass()
    
    print(num.__class__)
    # output: <class 'int'>
    print(string.__class__)
    # output: <class 'str'>
    print(p.__class__)
    # output: <class '__main__.MainClass'>

    通过上面的代码我们看到了,不论我们是简单的赋值操作,还是我们自己去定义一个类,并且通过这个类生成了一个对象。我们都可以使用__class__来查询对象所对应的方法。此处应该大多数人都是了解的。继续往下走

    将我们眼中的类作为对象

    刚才我们通过__class的方式获取了str、int、还有我们自定义的MainClass这三个类名。
    但如果我们继续把他们作为对象,那么所对应的类是谁呢?让我们打印下

    print(int.__class__) # 或者这么写:print(num.__class__.__class__)
    # output: <class 'type'>
    print(str.__class__)
    # output: <class 'type'>
    print(MainClass.__class__)
    # output: <class 'type'>

    class 'type' 这是一个什么鬼?

    它叫原类,是创造其他类的类…
    有人要问了,type就是祖宗了么?还有没有祖宗的祖宗?你可以自己验证啊,按照上面的方法

    print(type.__class__)
    output: <class 'type'>

     这下死心了啊,type这个祖宗上面没有祖宗了。哈哈….

    为什么是type

    type这个函数我们经常会用到,比如一个对象,我们想知道它是什么类型的,那么我们会使用type(xxx)
    那么type它到底是什么?看源码喽…

    class type(object):
        """
        type(object_or_name, bases, dict)
        type(object) -> the object's type
        type(name, bases, dict) -> a new type
        """
        ... ...
        ... ...

    看到注释的时候我们明白了,type有两个用法

    1. 获取类型

    2. 创建新type

    相信第一点,我们都经常用,否了解。
    第二点是干嘛的?让我们留一个悬念,接着往下看

    类的99.99%创建方法

    所有人不管是java的还是Python的都明白,创建一个类么,class+类名 OK了
    那么你知道你在class+类名,然后赋值或者定义实例方法的时候到底内存做了什么?

    class MainClass:
        name='Uranus'
    

    这个方法应该是比pass高档一分钱不到的脑残类了。可你知道在内存中它做了什么么?

    1. 首先他创建了一个变量,变量的名字叫MainClass

    2. 之后python开辟了一块内存空间,用于创建一个类,类名为ClassMain

    3. 将ClassMain这个变量指向ClassMain

    4. 在这个方法中创建一个dict的字典

    5. dict这个字典指向一个内存空间,存放着{name:Uranus}

    和你们想的一样么?先不说一样不一样,估计很多人都要说我是瞎说的…没关系

    介绍0.01%的类创建方法

    刚才留了一个疑问,type的第二种用法,用来创建一个新的type
    它是做什么的呢?让我先来演示一段代码

    def func():
        return 'is a function...'
    # 重点在这里
    TypeClass=type('MainClass1',(),{'name':'Uranus','func':func})
    
    print(TypeClass.__class__)
    # output: <class 'type'>
    
    print(TypeClass)
    # output: <class '__main__.MainClass1'>
    
    print(TypeClass.__dict__)
    # output: {'__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'MainClass1' objects>, '__dict__': <attribute '__dict__' of 'MainClass1' objects>, '__doc__': None, 'func': <function func at 0x00000000024DDEA0>, 'name': 'Uranus'}
    
    print(TypeClass.name)
    # output: Uranus
    
    print(TypeClass.func())
    # output: is a function...

    好了,现在告诉我,TypeClass是什么,是不是一个类?
    我在type中做了什么,是不是创建类名,忽略父类,创建类属性,创建类的实例方法?
    传统的class创建,知识将TypeClass这个变量名设置的和你的类名MainClass1一样而已
    type的第二种方法你会了么?类的创建过程你明白了么?之前你会么?双击666吧!

    The End

    OK,今天的内容就到这里,如果觉得内容对你有所帮助,可以点击文章右下角的“在看”。
    欢迎将这篇文章或我的微信公众号【清风Python】分享给更多喜欢python的人,谢谢。

    作者:清风Python

  • 相关阅读:
    SOAP协议调研
    android 支付宝 沙箱环境配置
    点击两次物理键退出APP
    Android LitePal的简单使用
    多线程
    【Android】15.0 UI开发(六)——列表控件RecyclerView的网格布局排列实现
    【Android】14.0 UI开发(五)——列表控件RecyclerView的瀑布布局排列实现
    【Android】利用回收机制创建ListView列表实现
    BaseActivity
    【MySQL数据库】一些bug的解决
  • 原文地址:https://www.cnblogs.com/huaweicloud/p/11861666.html
Copyright © 2020-2023  润新知