MST

星途 面试题库

面试题:Python自定义类与内置类型的相互转换

假设你有一个自定义的Python类MyClass,包含属性x和y。如何实现将MyClass的实例对象转换为一个字典(dict),并且可以从这个字典再转换回MyClass的实例对象?请给出具体的代码实现,并解释涉及到的魔法方法及其作用。
39.2万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
class MyClass:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def to_dict(self):
        return {
            'x': self.x,
            'y': self.y
        }

    @classmethod
    def from_dict(cls, data_dict):
        return cls(data_dict['x'], data_dict['y'])


# 示例使用
obj = MyClass(10, 20)
dict_obj = obj.to_dict()
print(dict_obj)
new_obj = MyClass.from_dict(dict_obj)
print(new_obj.x, new_obj.y)

涉及魔法方法解释

  1. __init__: 这是构造函数魔法方法。当创建类的实例时会自动调用,用于初始化实例的属性。在上述代码中,__init__方法接收参数xy,并将它们赋值给实例的xy属性。
  2. __new__: 虽然代码中未显式使用,但它是在__init__之前调用的魔法方法,负责创建类的实例对象。__new__是一个静态方法,第一个参数是类本身(cls),通常用于对象创建的特殊定制,如单例模式等。
  3. to_dict: 这不是魔法方法,而是自定义的实例方法,用于将实例对象转换为字典。它创建一个字典,键为属性名,值为对应的属性值。
  4. from_dict: 这是一个类方法,使用@classmethod装饰器定义。类方法的第一个参数是类本身(cls),它从给定的字典创建并返回类的实例对象。