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__方法