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

作者:华为云 时间:2023-01-26 06:59:27 

今天为大家介绍一下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有两个用法

获取类型

创建新type

相信第一点,我们都经常用,否了解。

第二点是干嘛的?让我们留一个悬念,接着往下看

类的99.99%创建方法

所有人不管是java的还是Python的都明白,创建一个类么,class+类名 OK了

那么你知道你在class+类名,然后赋值或者定义实例方法的时候到底内存做了什么


class MainClass:
 name='Uranus'

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

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

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

  • 将ClassMain这个变量指向ClassMain

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

  • 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的第二种方法你会了么?类的创建过程你明白了么?之前你会么?

感谢大家的阅读和对脚本之家的支持。

来源:https://blog.csdn.net/devcloud/article/details/96474514

标签:python,原类,类的创建
0
投稿

猜你喜欢

  • python安装scipy的步骤解析

    2021-09-09 03:20:36
  • 端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!

    2023-08-23 06:29:31
  • Python利用pandas计算多个CSV文件数据值的实例

    2022-11-21 23:00:26
  • Windows mysql命令行导入 .sql文件

    2010-12-03 16:12:00
  • JavaScript与JQuery框架基础入门教程

    2024-04-22 22:23:08
  • 浅谈Mysql、SqlServer、Oracle三大数据库的区别

    2024-01-23 21:30:40
  • HTML5本地存储初探(二)

    2010-03-07 15:47:00
  • pycharm2021激活码使用教程(永久激活亲测可用)

    2022-02-05 05:02:17
  • 解决MySQl查询不区分大小写的方法讲解

    2024-01-12 13:49:51
  • 在keras中获取某一层上的feature map实例

    2023-10-19 11:37:24
  • Python folium的实用功能详解

    2021-08-27 10:07:21
  • Python类和实例的属性机制原理详解

    2022-12-12 19:47:27
  • Python实现根据日期获取当天凌晨时间戳的方法示例

    2023-08-04 14:16:46
  • 利用Django提供的ModelForm增删改数据的方法

    2021-02-04 04:13:00
  • js和php邮箱地址验证的实现方法

    2024-06-05 09:38:13
  • pandas实现导出数据的四种方式

    2023-01-03 14:57:57
  • 基于python实现百度语音识别和图灵对话

    2022-08-23 23:44:54
  • border:none;与border:0;的区别

    2009-11-27 19:04:00
  • 拖拽翻页(ThrowPage)详解 cool

    2009-12-02 09:54:00
  • python3中str(字符串)的使用教程

    2021-07-19 00:28:47
  • asp之家 网络编程 m.aspxhome.com