Python----面向对象---练习二:在元类中控制自定义的类无需__init__方法

练习二:在元类中控制自定义的类无需__init__方法

 1 class Mymeta(type):
 2 
 3     def __call__(self, *args, **kwargs):
 4         print(self)
 5         print(args)
 6         print(kwargs)
 7         if args:
 8             raise TypeError('实例化传参必须为关键字形式')
 9         obj = object.__new__(self)
10 
11         for k, v in kwargs.items():
12             obj.__dict__[k.upper()] = v
13         return obj
14 
15 
16 class Chinese(metaclass=Mymeta):
17     country = 'China'
18     tag = 'Legend of the Dragon'  # 龙的传人
19 
20     def walk(self):
21         print('%s is walking' % self.name)
22 
23 
24 p = Chinese(name='egon', age=18, sex='male')
25 print(p.__dict__)
26 
27 结果为
28 
29 <class '__main__.Chinese'>
30 ()
31 {'name': 'egon', 'age': 18, 'sex': 'male'}
32 {'NAME': 'egon', 'AGE': 18, 'SEX': 'male'}

利用__call__方法

原文地址:https://www.cnblogs.com/xudachen/p/8667091.html