元类的一丢丢东西

一、元类

1、概念:

元类是一种特殊的类,元类用来创建类。
2、创建元类格式:

type(类名,(父类名称组成的元祖,可以为空),{类属性,字典形式})

3、动态创建一个元类:

Test = type('Test',(),{'name':'张三','age':18})

4、动态创建类继承:

Test1 = type('Test1',(Test,),{})

5、添加实例方法:

def	test_1(self):
	print("实例方法")
Test2 = type("Test2",(),{'test_1':test_1})

6、添加类方法:

@classmethod
def test_2(cls):
	print("这是类方法")
Test3 = type('Test3',(),{'test_2':test_2,'test_1':test_1})

7、添加静态方法:

@staticmethod
def test_3():
	print("这是静态方法喲")
Test4 = type('Test4',(),{'test_3':test_3,'test_2':test_2,'test_1':test_1})

8、综合演练:(有点重要哦)

class A():
	num = 100
	def print_b(self):
		print(self.num)
		
	@ staticmethod
	def print_static():
		print('------------------hahahahhahh-----------------')
		
	@classmethod
	def print_class(cls):
		print(cls.num)
B = type('B',(A,),{'print_b':print_b,'print_static':print_static,'print_class':print_class}
b = B()
b.print_b()
b.print_static()
b.print_class()

9、查看实例对象由谁创建出来的:

object.__class__

10、元类的实际作用哦(很重要的哦)

class Upper(type): # 利用元类将类的非私有属性名修改为大写名称,很厉害的哦。。。。。
    def __new__(cls, class_name, class_parents, class_attr):
        new_attr = {}
        for name, value in class_attr.items():
            if not name.startswith("__"):
                new_attr[name.upper()] = value

        return type(class_name, class_parents, new_attr)

class Foo(object, metaclass=Upper):
    bar = 'bip'

print(hasattr(Foo, 'BAR'))
p = Foo()
print(p.BAR) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值