py_继承(样例)

class Animal:
    def eat(self):
        print("--吃--")
    def drink(self):
        print("--喝--")
    def sleep(self):
        print("--睡觉--")
    def run(self):
        print("--跑--")

class Dog(Animal):
    def bark(self):
        print("--汪汪叫--")

class Cat(Animal):
    def work(self):
        print("--抓老鼠--")
class Xiaotianq(Dog):
    def fly(self):
        print("--飞--")

a=Animal()
a.eat()
wangcai=Dog()
wangcai.eat()
miao=Cat()
miao.eat()
xiapt=Xiaotianq()
xiapt.fly()
xiapt.bark()
xiapt.eat()

 

任务描述 在子类继承父类的方法时,若子类需要这个方法具有不同的功能,那么可以通过覆盖(overriding)来重写这个方法。本关的任务是让学习者掌握通过继承覆盖方法。 相关知识 通过继承覆盖方法,也就是在子类再写一个与父类中一的方法,实现自己想要实现的功能。如: class Parent: def sayHello(self): print("hello,i am class parent") class Subclass(Parent): def sayHello(self): print("hello,i am class subclass") sc = Subclass() sc.sayHello() 结果为: hello,i am class subclass Subclass继承了Parent类,但是因为它在类中重写了sayHello(),所以在创建实后,调用的是重写后的sayHello()。 调用父类方法 在重写了父类中的方法后,也可以调用父类中的被重写方法。这时就是去调用一个未绑定的父类方法。如: Parent.sayHello(sc) 结果为: hello,i am class parent 还可以在子类的重写方法显示调用。如: class Parent: def sayHello(self): print("hello,i am class parent") class Subclass(Parent): def sayHello(self): Parent.sayHello(self) print("hello,i am class subclass") sc = Subclass() sc.sayHello() 结果为: hello,i am class parent hello,i am class subclass 但是最好的方法是在子类的重写方法使用super()内建方法。如: class Parent: def sayHello(self): print("hello,i am class parent") class Subclass(Parent): def sayHello(self): super(Subclass,self).sayHello() print("hello,i am class subclass") sc = Subclass() sc.sayHello() 结果为: hello,i am class parent hello,i am class subclass 如果您想了解更多覆盖方法的相关知识,请参考:[美] Wesley J.Chun 著《 Python 核心编程》第十三章。 编程要求 本关的任务是补全Point.py文件中的代码,具体要求如下: 填入覆盖父类getPoint()方法的代码,并在这个方法中分别得出x - y与z - h结果的绝对值。 本关涉及的代码文件src/Step2/Point.py的代码框架如下: class point: def __init__(self,x,y,z,h): self.x = x self.y = y self.z = z self.h = h def getPoint(self): return self.x,self.y,self.z,self.h class line(point): # 请在下面填入覆盖父类getPoint()方法的代码,并在这个方法中分别得出x - y与z - h结果的绝对值 ########## Begin ########## ########## End ########## print(length_one,length_two) 测试说明 本文的测试文件是Pointtest.py,具体测试过程如下: 平台自动编译生成Point.exe; 平台运行Point.exe,并以标准输入方式提供测试输入; 平台获取Point.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。 以下是平台对src/step2/Point.py测试集: 预期输入: 12 41 6 0 预期输出: 29 6 预期输入: 2 90 65 10 预期输出: 88 55 开始你的任务吧,祝你成功!
03-24
### 如何在 Python 子类中正确覆盖父类的方法 在 Python 中,可以通过定义子类并重新实现父类中的方法来覆盖该方法。为了确保能够适当地扩展而非完全替代父类的行为,可以使用 `super()` 函数调用父类的原始方法[^2]。 以下是具体的实现方式: #### 定义父类和子类 假设有一个父类 `Base` 和一个子类 `Derived`,其中子类需要覆盖父类的一个名为 `calculate_difference` 的方法,并返回两个数差值的绝对值。 ```python class Base: def calculate_difference(self, a, b): return a - b # 默认行为是简单相减 class Derived(Base): def calculate_difference(self, a, b): result = super().calculate_difference(a, b) # 调用父类方法获取初始结果 return abs(result) # 返回差值的绝对值 ``` 在这个子中,`Derived` 类通过 `super()` 调用了 `Base` 类的 `calculate_difference` 方法,从而保留了父类的部分逻辑,同时对其进行了扩展以满足新的需求。 #### 测试代码 下面是一个简单的测试脚本,验证上述设计是否按预期工作: ```python base_instance = Base() derived_instance = Derived() print(base_instance.calculate_difference(10, 5)) # 输出: 5 print(derived_instance.calculate_difference(10, 5)) # 输出: 5 (绝对值) print(base_instance.calculate_difference(5, 10)) # 输出: -5 print(derived_instance.calculate_difference(5, 10)) # 输出: 5 (绝对值) ``` 以上代码展示了如何利用继承机制以及 `super()` 来增强功能的同时保持原有结构的一致性和可维护性。 --- ### 使用 NumPy 数组处理数据输入 如果涉及更复杂的数据操作,比如数组运算,则可能需要用到 NumPy 库。NumPy 提供了一个强大的工具集用于科学计算,其中包括创建多维数组对象及其各种属性设置的功能[^3]。 如,在上面的子基础上增加对列表形式参数的支持: ```python import numpy as np class AdvancedDerived(Derived): def __init__(self, data_type=np.int64): # 设置默认数据类型 self.data_type = data_type def process_input(self, input_list): return np.array(input_list, dtype=self.data_type) # 将输入转换成指定类型的 NumPy 数组 def calculate_difference(self, list_a, list_b): array_a = self.process_input(list_a) array_b = self.process_input(list_b) differences = super().calculate_difference(array_a, array_b) # 对应位置逐项做差 absolute_differences = np.abs(differences) # 取绝对值 return absolute_differences.tolist() # 转回标准 Python 列表以便通用接口兼容 ``` 此版本不仅支持单个数值间的差异计算,还允许传入整个序列作为批量处理的一部分。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值