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

举报
清风Python 发表于 2018/05/08 15:51:05 2018/05/08
【摘要】 获取对象的类名python是一门面向对象的语言,对于一切接对象的python来说,咱们有必要深入的学习与了解一些知识 首先大家都知道,要获取一个对象所对应的类,需要使用__class__来进行检索。 但如果我们只是一个简单的赋值语句,能这么使用么?让我们看下下面的代码:num=10string='abc'class MainClass: passp=MainClass()print(n...

获取对象的类名

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

num=10string='abc'class MainClass:
    passp=MainClass()

print(num.__class__)# output: <class 'int'>print(string.__class__)# output: <class 'str'>print(p.__class__)# output: <class '__main__.MainClass'>123456789101112

通过上面的代码我们看到了,不论我们是简单的赋值操作,还是我们自己去定义一个类,并且通过这个类生成了一个对象。我们都可以使用__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'>123456

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

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

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

这下死心了啊,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
    """
    ... ...
    ... ...12345678

看到注释的时候我们明白了,type有两个用法 
1. 获取类型 
2. 创建新type

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

类的99.99%创建方法与100%过程

这个标题诱不诱惑?很多人会说不诱惑,而且比较傻,那么就往下看吧 
所有人不管是java的还是Python的都明白,创建一个类么,class+类名 OK了 
那么你知道你在class+类名,然后赋值或者定义实例方法的时候到底内存做了什么?

class MainClass:
    name='Uranus'12

这个方法应该是比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...12345678910111213141516171819

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


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。