首页 > 解决方案 > 覆盖属性

问题描述

在一个基类中,我正在创建一个具有property()函数的属性:

from abc import ABCMeta, abstractmethod

class Person(metaclass=ABCMeta):

    @abstractmethod
    def __init__(self, name, telephone):
        self.name = name
        self.telephone = telephone

    def get_name(self) -> str:
        return self.__name

    def set_name(self, value: str):
        self.__name = value

    name = property(fget=get_name, fset=set_name)

而在派生类中我需要重写set_name方法,也就是Person.name.fset应该指向一个修改版本的方法。我试过了,但没有奏效:

class Employee(Person):

    def __init__(self, name, telephone, email):
        super().__init__(name, telephone)
        self.email = email

    def set_name(self, value):
        super().set_name('override')

    Person.name.fset = set_name

有没有办法覆盖python中的属性?

标签: pythonpython-3.x

解决方案


推荐阅读