首页 > 其他分享 >class底层原理分析

class底层原理分析

时间:2023-10-30 11:38:00浏览次数:23  
标签:__ name self Person 原理 type class 底层

表面上是: class + 类名 会把类构造出来

实际上是: 元类实例化产生类 这个对象

# 类实例化产生对象, 一定是:	类名()
# Person  类是有type实例化产生,传一堆参数
# type()  调用类的__init__方法
# type()
# 如果想要控制类的产生过程,就要用 type(object_or_name, bases, dict) 这个类型 传三个参数
# object_or_name: 类的名字, 是一个字符串
# bases: 是它的所有父类(基类)	要用元组的形式Tuple
# dict: 是它的名称空间			 要用字典的形式
class Person:
    school = 'FYZX'
    def __init__(self, name):
        self.name = name
    def score(self):
        print("分数为100")
      
p = Person('nick')
print(p.name)

通过type来直接产生类, 不用class关键字了

l = {}
exec('''
school = 'FYZX'
def __init__(self, name):
    self.name = name
def score(self):
    print("分数为100")
''', {}, l)

# 也可以手动传值
# def __init__(self, name):
#     self.name = name
# type('Person', (object,), {'school': 'FYZY', '__init__': __init__})

Person = type('Person', (object,), l)
print(Person.__dict__)
p = Person('nick')
print(p.name)
print(p.__dict__)

class关键字的本质原理:

class 底层就是调用type来实例化产生类 (类其实也是个对象)

exec()eval()的区别

# exec(object, globals, locals)	
# object其实就是一个字符串  
# globals是把这个字符串的内容转换成全局名称空间(globals)
# locals是把这个字符串的内容转换成局部名称空间(locals)

image-20231024161546932

原理总结:

标签:__,name,self,Person,原理,type,class,底层
From: https://www.cnblogs.com/hanyingshuo/p/17797371.html

相关文章

  • 20 Synchronized和Lock的实现原理与区别
    相同点:(1)都是可重入锁(2)都保证了可见性和互斥性(3)都可以用于控制多线程对共享对象的访问不同点:(1)ReentrantLock等待可中断(2)synchronized中的锁是非公平的,ReentrantLock默认也是非公平的,但是可以通过修改参数来实现公平锁。(3)ReentrantLock绑定多个条件(4)synchronized是Java中的关键字是JV......
  • DM数据库架构原理之内存结构
    2.DM数据库体系架构谈DM数据库内存结构之前,我们必须先了解下DM数据库的体系架构,本人认为要想学好一门数据库,必须要深入了解它的体系架构,下面这幅图是本人对DM体系架构理解画出来的。工作原理:下面我们从一个用户请求开始讲,DM的完整的工作机制是咋样的,首先当客户端的发出一条select......
  • SpringCloud复习:(2)@LoadBalanced注解的工作原理
    @LoadBalanced注解标记了一个RestTemplate或WebClientbean使用LoadBalancerClient来进行负载均衡。LoadBalancerAutoConfiguration类给带注解的@RestTemplate添加了拦截器:LoadBalancerInterceptor.具体流程如下:首先定义一个LoadBalancerInterceptor然后定义了一个RestTemplateC......
  • 【Spring】AOP实现原理
    注册AOP代理创建器在平时开发过程中,如果想开启AOP,一般会使用@EnableAspectJAutoProxy注解,这样在启动时,它会向Spring容器注册一个代理创建器用于创建代理对象,AOP使用的是AnnotationAwareAspectJAutoProxyCreator,它实现了SmartInstantiationAwareBeanPostProcessor,从名字中可以看出......
  • Java基础 获取 class 对象的三种方式
    ①Class.forName("全类名")  →  最为常用全类名:包名+类名Class的首字母是大写的,所以是一个类名,是用来描述字节码文件的。这个类里面有一个静态方法叫 forName,参数可以传递一个类的全类名,可以获取到参数的字节码文件对象 ②类名.class  →  这种方式更......
  • 【C++】继承 ⑬ ( 虚继承原理 | 虚继承解决继承二义性问题 | 二义性产生的原因分析 )
    文章目录一、虚继承原理1、虚继承解决继承二义性问题2、二义性产生的原因分析3、虚继承原理二、代码示例-虚继承原理1、完整代码示例2、执行结果一、虚继承原理1、虚继承解决继承二义性问题继承的二义性:如果一个子类(派生类)继承多个父类(基类),这些父类都继......
  • 四种常见线程池的原理
    newFixedThreadPool(固定数目线程的线程池)newCachedThreadPool(可缓存线程的线程池)newSingleThreadExecutor(单线程的线程池)newScheduledThreadPool(定时及周期执行的线程池)前三种线程池的构造直接调用ThreadPoolExecutor的构造方法。newSingleThreadExecutorpublicsta......
  • coredns基本原理
    k8s1.19.0coredns1.7.0dnsip获取过程dns请求到达coredns后,从list/watch本地缓存indexer获取对象,返回结果。外部域名返回用户配置的IP。有状态应用Pod域名:pod-name.svc-name.namespace.svc.cluster.local返回PodIP。HeadlessCluster:svc-name.namespace.svc.cluster.local......
  • SAP UI5 里 Namespace,Class 和 Enum 的区别
    SAPUI5是一种用于构建企业级Web应用程序的前端开发框架,它提供了丰富的UI组件和工具,以便开发者可以轻松创建现代、响应式和高性能的应用程序。在SAPUI5的API文档中,我们可以找到不同类型的树节点,包括Namespace、Class和Enum。下图的C代表Class,N代表Namespace,E代表Enum.......
  • 计算图架构原理与算法分析
    计算图架构原理与算法分析这些节点和主题的图表,以及它们的连接方式,经常被称为计算图。计算图的可视化,可以帮助我们了解有哪些节点,以及它们如何互相沟通。ROS提供了一个工具,叫做rqt_graph,可以显示系统的计算图。计算图管道-RFCSOC硬件通常包括多个异构芯片组,例如XilinxUltra......