class底层原理分析

发布时间 2023-10-30 11:28:02作者: hanyingshuo

表面上是: 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

原理总结: