添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
def method_is_overided_in_subclass(method_name: str, sub_class: Any, base_class: Any) -> bool:
    """Define whether subclass override specified method
    Args:
        method_name: to be defined method name
        sub_class: to be defined  sub class
        base_class: to be defined base class
    Returns:
        True or False
    assert issubclass(sub_class, base_class), "class %s is not subclass of class %s" % (
        sub_class,
        base_class,
    this_method = getattr(sub_class, method_name)
    base_method = getattr(base_class, method_name)
    return this_method is not base_method
class A:
  def test_method(self):
class B(A):
  def test_method(self):
if __name__ == '__main__':
    print(method_is_overided_in_subclass(method_name="test_method", sub_class=B,base_class=A))
class BaseClass(object):
    def foo(self):
        return 'foo'
    def bar(self):
        return 'bar'
    def methods_implemented(self):
        """This does work."""
        overriden = []
        for method in ('foo', 'bar'):
            this_method = getattr(self.__class__, method)
            base_method = getattr(BaseClass, method)
            if this_method is not base_method:
                overriden.append(method)
        return overriden
class SubClass(BaseClass):
    def foo(self):
        return 'override foo'
o = SubClass()
print(o.methods_implemented())
通用方法def method_is_overided_in_subclass(method_name: str, sub_class: Any, base_class: Any) -> bool: """Define whether subclass override specified method Args: method_name: to be defined method name sub_class: to be defined s. 可以使用覆盖的形式,在 子类 中重新编写父 方法 具体的实现形式就是在 子类 中定义一个与父 同名的 方法 重写 之后,只会调用 子类 重写 后的 方法 ,不会调用 父 中封装的 方法 2)扩展父 方法 如果在开发的过程中, 子类 方法 实现中,包含父 方法 的实现 父 原本封装的 方法 实现是 子类 方法 的一部分 使用扩展的方式 重写 方法 : 在 子类 重写
我用的pycharm2017,在看源代码的时候,在 方法 前面经常出现一个圆圈加一个箭头的符号, 这里表示这个 重写 了,将鼠标移动到上面去,会看到“Has overriden methods”,即表示这个 重写 了 点击,然后选择 重写 它的 方法 ,可以看到在哪个文件的哪个 重写 了这个 方法 选择第一个,可以定位到 重写 __getitem__的 方法 ,这个 方法 的前面,有一个圆圈加一个向上的红色箭头,这表示 重写 方法
Python 中, 子类 可以 继承 的属性和 方法 。当 子类 继承 时,如果 子类 需要添加自己的属性或 方法 ,或者需要 重写 方法 ,可以在 子类 中重新定义 `__init__` 方法 。 在 子类 重写 `__init__` 方法 时,需要调用父 的 `__init__` 方法 来初始化父 的属性。可以使用 `super()` 函数来调用父 的 `__init__` 方法 。 以下是一个简单的例子: ``` python class Animal: def __init__(self, name): self.name = name print("Animal initialized") class Dog(Animal): def __init__(self, name, breed): super().__init__(name) self.breed = breed print("Dog initialized") my_dog = Dog("Buddy", "Labrador") print(my_dog.name) print(my_dog.breed) 在这个例子中,`Dog` 继承 了 `Animal` 。`Dog` 重写 了 `__init__` 方法 ,并且调用了父 的 `__init__` 方法 来初始化 `name` 属性。同时,`Dog` 添加了 `breed` 属性。创建 `my_dog` 对象时,会输出初始化信息,并且打印出 `name` 和 `breed` 属性的值。