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` 属性的值。