class底层原理分析

class底层原理分析

class类名,会把类构造出来

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

类实例化产生对象,一定是:类名()

Person  类是由type实例化产生的,传一堆参数
type()  调用类的__init__方法
#type()
type(object_or_name,bases,dict)
object_or_name:类的名字,是个字符串
base:是它的所有的父类,基类
dict:名称空间,是一个字典

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

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

''',{},l)
def __init__(self,name):
    self.name=name

# Person=type('Person',(object,),{'school':'oldboy','__init__':__init__})
Person=type('Person',(object,),l)

print(Person.__dict__)
print(Person.__bases__)
p=Person('nick')
print(p.name)
print(p.__dict__)
#{'school': 'oldboy', '__init__': <function __init__ at 0x000002190DBD2F28>, 'score': <function score at 0x000002190DF44488>, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}
(<class 'object'>,)
nick
{'name': 'nick'}

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

class Person:
    school='oldboy'
    def __init__(self,name):
        self.name=name
    def score(self):
        print('分数是100')
a=Person
p=Person('nick')

exec() eval()区别

#通过exec可以执行动态Python代码,类似Javascript的eval功能;而Python中的eval函数可以计算Python表达式,并返回结果;(exec不返回结果,print(eval("…"))打印None);
l={}
exec('''
school='oldboy'
def __init__(self,name):
    self.name=name
def score(self):
    print('分数是100')
''',{},l)

print(l)
g={ 'x':1,'y':2}
l={}
exec('''
global x
x=100
z=200
m=300
''',g,l)
print(g)
print(l)

转载于:https://www.cnblogs.com/aden668/p/11453392.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ReentrantLock是一个可重入锁,实现了Lock接口,并且支持重新进入的特性。当一个线程通过调用lock方法获取了锁之后,如果再次调用lock方法,该线程不会被阻塞,而是增加了重试次数。 在ReentrantLock内部,它维护了一个Sync内部,该实现了Lock接口的方法,并且通过调用AQS(AbstractQueuedSynchronizer)的Acquire方法来实现加锁的操作。具体而言,根据ReentrantLock初始化时选择的公平锁或非公平锁,Sync的Lock方法会执行相关的内部Lock方法,最终会调用AQS的Acquire方法。 因此,ReentrantLock底层的原理是通过Sync内部的Lock方法调用AQS的Acquire方法来实现加锁操作的。这一过程实现了可重入的特性,使得同一个线程可以多次获取锁而不会被阻塞。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [7-ReentrantLock底层原理分析](https://blog.csdn.net/weixin_45596022/article/details/113817683)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [ReentrankLock的底层原理](https://blog.csdn.net/qq_45974547/article/details/123486390)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值