编写类时,我们有时会有相似的需求,这时候我们就可以使用继承来实现代码复用。在Python中,我们可以通过定义子类来继承父类的属性和方法,从而进行扩展和修改,这就是面向对象编程中的继承。
【步骤一】定义父类
在定义子类之前,我们需要先定义一个父类。在Python中,定义类的语法是关键字class
,后加类名和冒号。接着,我们可以在类中定义属性和方法。
以下示例代码中,我们定义了一个名为Person
的类,并分别定义了名字name
和年龄age
作为其属性。方法__init__()
是一个特殊的方法,也称为构造方法,用于构造一个对象并进行初始化。在这个示例中,我们通过参数传递调用了这个方法,并在方法中对属性进行了初始化。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
【步骤二】定义子类
接下来,我们通过定义子类来继承父类的属性和方法。在Python中,定义子类的语法也是使用关键字class
,后加子类的名称和要继承的父类名称,中间用括号括起来。
以下示例代码中,我们定义了一个名为Student
的子类,并继承了父类Person
。我们还添加了一个新的属性stuid
,并在初始化方法中对其进行了赋值。最后,我们还定义了一个新的方法study()
,用于模拟学习的过程。
class Student(Person):
def __init__(self, name, age, stuid):
super().__init__(name, age)
self.stuid = stuid
def study(self, course):
print(f"{self.name} is studying {course}.")
在子类中,我们可以直接访问父类的属性和方法。具体方法是使用super()
函数,它可以帮助我们调用父类的方法。在这个示例中,super().__init__(name, age)
就是调用了父类中的__init__()
方法,对name
和age
属性进行了初始化。
【步骤三】创建对象,并调用方法
现在我们定义好了父类和子类,可以创建对象并调用方法进行测试了。在以下示例代码中,我们首先创建了一个Person
类对象和一个Student
类对象。然后,我们调用了子类Student
的study()
方法,由于study()
方法不是父类Person
中的方法,因此只有子类对象才能调用。
p = Person("Tom", 20)
s = Student("Jerry", 18, 20001)
print(p.name)
print(s.name)
print(s.age)
print(s.stuid)
s.study("Computer Science")
输出结果为:
Tom
Jerry
18
20001
Jerry is studying Computer Science.
可以看到,父类和子类的属性和方法可以被正确地访问。在子类中,我们还添加了新的属性和方法,且都可以被正常调用。
【示例一】实现继承的多级链
在Python中,我们还可以实现多级链的继承关系,也就是一个子类可以继承另一个已经继承了父类的子类。以下示例代码中,我们定义了一个名为SeniorStudent
的子类,该类继承自Student
子类。
class SeniorStudent(Student):
def __init__(self, name, age, stuid, major):
super().__init__(name, age, stuid)
self.major = major
def research(self, topic):
print(f"{self.name} is researching {topic} in {self.major}.")
在该示例中,我们又添加了新的属性major
和方法research()
,来模拟高年级学生进行专业研究。这一次,我们继承的是Student
子类,而不是Person
父类。在__init__()
方法中,我们同样调用了父类Student
的__init__()
方法,对三个属性进行了初始化。
【示例二】实现属性和方法的重写
当我们继承了父类的方法时,有可能需要对该方法进行一些改动,这就是方法的重写。在Python中,我们可以使用与父类相同的方法名定义一个新的方法,从而覆盖父类的方法。
以下示例代码中,我们重新定义了Student
子类中的__init__()
方法,并添加了新的参数gender
。通过这个参数,我们可以在子类中重新定义Person
父类中的__str__
方法,从而重新编写对象的字符串表示。
class Student(Person):
def __init__(self, name, age, gender, stuid):
super().__init__(name, age)
self.gender = gender
self.stuid = stuid
def __str__(self):
return f"{self.name}({self.gender}), Age {self.age}, StuID {self.stuid}"
在这个示例中,我们重新定义了__str__()
方法,使用return
语句返回了一个新的字符串表示。在字符串表示中,我们添加了gender
属性的信息。由于__str__()
方法是一个内置方法,因此无需调用,我们可以直接使用print()
语句输出对象即可。
以上就是跟老齐学Python之编写类之三子类的详细攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:跟老齐学Python之编写类之三子类 - Python技术站