面试题答案
一键面试- 子类继承父类类方法:
- 在Python中,子类会自动继承父类的类方法。当定义子类时,只要父类的类方法不是私有的(即方法名不以双下划线开头),子类实例就可以直接调用父类的类方法。
- 重写类方法要点:
- 方法签名:重写的方法应该保持与父类方法相同的方法名和参数列表,以确保接口的一致性。
- 调用父类方法:如果在重写的方法中需要调用父类的同名方法,可以使用
super()
函数。这样可以保证父类方法中的逻辑也能得到执行,除非明确不需要执行父类方法的逻辑。
- 保证单例特性不受影响:
- 子类重写类方法时,需要确保不会破坏单例模式的实现。这意味着在重写的方法中,不能重新实例化对象,除非这是业务逻辑所必需的且处理得当。通常,单例模式的实现依赖于类级别的变量来保存唯一的实例,重写方法时要避免意外修改这些变量导致创建多个实例。
- 代码示例(Python):
class SingletonMeta(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super().__call__(*args, **kwargs)
return cls._instances[cls]
class Parent(metaclass = SingletonMeta):
@classmethod
def class_method(cls):
print("This is the parent class method.")
class Child(Parent):
@classmethod
def class_method(cls):
# 调用父类方法
super().class_method()
print("This is the child class method, overriding the parent method.")
# 测试
parent_instance = Parent()
parent_instance.class_method()
child_instance = Child()
child_instance.class_method()
# 验证单例特性
print(parent_instance is Parent())
print(child_instance is Child())
在上述代码中:
SingletonMeta
是一个元类,用于实现单例模式。Parent
类使用这个元类实现单例。Parent
类定义了一个类方法class_method
。Child
类继承自Parent
类,并对class_method
进行了重写。在重写的方法中,首先调用了父类的class_method
,然后添加了子类特有的逻辑。- 最后通过验证
parent_instance is Parent()
和child_instance is Child()
来确认单例特性没有受到影响。