提问在下方注释里
import time
def get_class_instantiation_time(self):
return self.class_instantiation_time
class CleanCodeGuard(type):
classes_created = []
def __new__(mcs, name, bases, dictionary):
if 'get_class_instantiation_time' not in dictionary:
dictionary['get_class_instantiation_time'] = get_class_instantiation_time
"""
为什么要加这2行ifstatement,直接obj.get_class_instantiation_time = time.time()不就可以了吗,然后 obj.class_instantiation_time = time.time()不就可以省略了
"""
obj = super().__new__(mcs, name, bases, dictionary)
obj.class_instantiation_time = time.time()
CleanCodeGuard.classes_created.append(name)
time.sleep(1)
return obj
class My_Class1(metaclass=CleanCodeGuard):
pass
class My_Class2(metaclass=CleanCodeGuard):
pass
my_object1 = My_Class1()
print(my_object1.get_class_instantiation_time())
my_object2 = My_Class2()
print(my_object2.get_class_instantiation_time())
print(CleanCodeGuard.classes_created)
加这个判断是为了不覆盖原来类中的方法,类中没有get_class_instantiation_time的话再给类实例添加get_class_instantiation_time方法,简单示例如下
import time
def get_class_instantiation_time(self):
return self.class_instantiation_time
class CleanCodeGuard(type):
classes_created = []
def __new__(mcs, name, bases, dictionary):
if 'get_class_instantiation_time' not in dictionary:
dictionary['get_class_instantiation_time'] = get_class_instantiation_time
obj = super().__new__(mcs, name, bases, dictionary)
obj.class_instantiation_time = time.time()
CleanCodeGuard.classes_created.append(name)
time.sleep(1)
return obj
class My_Class1(metaclass=CleanCodeGuard):
def get_class_instantiation_time(sefl):
return "get_class_instantiation_time--My_Class1"
class My_Class2(metaclass=CleanCodeGuard):
pass
my_object1 = My_Class1()
print(my_object1.get_class_instantiation_time())#这里打印的是get_class_instantiation_time--My_Class1,而非类创建的时间
my_object2 = My_Class2()
print(my_object2.get_class_instantiation_time())
print(CleanCodeGuard.classes_created)
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!