面向对象 10元类介绍&自定义元类控制类的创建

元类介绍
储备知识exec
参数1:字符串形式的命令
参数2:全局作用域(字典形式),如果不指定默认使用gloabls()
参数3:局部作用域(字典形式),如不不指定默认使用locals()

#print(globals())


g={
    'x':1,
    'y':2
}
l={}

exec("""
 global x,m
 x=10
 m=100
 
 z=3
""",g,l)

print(g)
# print(l)

python中一切皆对象,对象可以怎么用
1、都可以被引用,x=obj
2、都可以当作函数的参数传入
3、都可以当作函数的返回值
4、都可以当作容器类的元素 l=[func,time,obj,1]

类也是对象Foo=type(…)

class Foo:
    pass
obj=Foo()
print(type(obj))
print(type(Foo))
class Bar:
    pass
print(type(Bar))

产生的类称之为元类,默认所有用class定义的类,它们是元类的type

#Foo=type(...)
<class '__main__.Foo'>
<class 'type'>
<class 'type'>

定义类的两种方式:
方式一:class

class Chinese:
    country='China'
    
    def __init__(self,name,age):
        self.name=name
        self,age=age
        
    def talk(self):
        print('%s is talking'%self.name)

方式二:type
定义类的三要素:类名,类的基类们,类的名称空间

class_name='Chinese'
class_bases=(object,)

class_body="""
    country='China'

    def __init__(self,name,age):
        self.name=name
        self,age=age

    def talk(self):
        print('%s is talking'%self.name)
        
"""
obj=Chinese('egon',18)
print(obj,obj.name,obj.age)

class_name='Chinese'
class_bases=(object,)

class_body="""
country='China'

def __init__(self,name,age):
    self.name=name
    self.age=age

def talk(self):
    print('%s is talking'%self.name)
"""

class_dic={}
exec(class_body,globals(),class_dic)
#print(class_dic)

Chinese1=type(class_name,class_bases,class_dic)

obj1=Chinese1('egon',18)
print(obj1,obj1.name,obj1.age)

```

自定义元类控制类的创建

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值