Python更改类函数

Python更改类函数,python,class,Python,Class,在Python中,是否可以获取一个类并删除它的一个成员函数?i、 e:A类有7个成员函数。另外五个类继承自类A。现在,假设其中一个类不需要类A的成员函数。有没有办法让这个功能不出现 现在,假设其中一个类不想要一个类A的成员 功能。有没有办法让这个功能不出现 允许您控制“显示”哪些方法。它并没有禁用该方法,它只允许您控制所看到的内容 理想情况下,这项工作应该伴随着重写有问题的方法并将其提升(例如,这是Python方法中使用的方法) 根据方法的不同,还有其他方法可以禁用它。例如,可以通过将继承的_散

在Python中,是否可以获取一个类并删除它的一个成员函数?i、 e:A类有7个成员函数。另外五个类继承自类A。现在,假设其中一个类不需要类A的成员函数。有没有办法让这个功能不出现

现在,假设其中一个类不想要一个类A的成员 功能。有没有办法让这个功能不出现

允许您控制“显示”哪些方法。它并没有禁用该方法,它只允许您控制所看到的内容

理想情况下,这项工作应该伴随着重写有问题的方法并将其提升(例如,这是Python方法中使用的方法)


根据方法的不同,还有其他方法可以禁用它。例如,可以通过将继承的_散列_)方法设置为“无”来禁用它(例如,这是在集合抽象基类中使用的方法,例如).

一般来说,您不应该删除子类中基类API的一部分。这是因为继承的一个要点是子类的实例就是基类的实例。如果它们缺少方法,则内容可能会以尴尬的方式中断

也就是说,有时重写继承的方法并在调用不适当时引发异常是合适的。这可能只是在参数不是子类所需的参数时,但在某些情况下,它可能适用于所有调用。尽管如此,尝试使异常有用,因为程序员获得调用文档化方法时出现意外的
AttributeError
或其他常见错误

下面是一个子类的示例,该子类重写其超类的部分API以禁止使用它。请注意,我使用的是getter和setter方法,这通常不是很Pythonic,但很容易理解(最好使用
属性
s)

基类:

class Rectangle(object):
    def __init__(self, width, height):
        self._width = width
        self._height = height

    def get_width(self):
        return self._width

    def set_width(self, value):
        self._width = value)

    def get_height (self):
        return self._height 

    def set_height (self, value):
        self._height = value)

    def area(self):
        return self.get_width() * self.get_height()
和一个子类:

class Square(Rectangle):
    def __init__(self, side):
        self._side = side

    def get_side(self):
        return self._side

    def set_side(self, value):
        self._side = value

    get_width = get_height = get_side

    def set_width(self, value):
        raise TypeError("Squares cannot have their sides changed individually")

    set_height = set_width

area
方法是继承的,在
Square
类中仍然可以像预期的那样工作,其他只调用实例的getter方法而不是setter方法的矩形代码也是如此。

听起来更像是需要重新考虑实现/设计,而不是使用现有的实现。同意,这不是支持ted特别使用Python,因为你不应该首先这么做!@jamylak问题是,上面的答案实际上是错误的…@JBernardo我们不应该在该页面上修复它吗?@JBernardo:虽然这个问题的答案并没有真正删除该方法,但重写一个方法以引发异常可能是最合适的做法可以这样说,继承接口的一部分在子类中是禁止使用的。不过,我不会使用
AttributeError
,而是使用更具描述性的内容(用一条消息解释为什么子类中的接口不同)。