知行编程网知行编程网  2022-12-08 01:00 知行编程网 隐藏边栏  2 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Shuttle类如何在python3中生成?的相关知识,希望可以帮到处于编程学习途中的小伙伴


之前提到过很多继承的内容,包括子类和父类其实也归属于这个问题。我们今天所要讲的Shuttle不完全用的是这一个类,还会涉及到继承另一个类的问题,这些话小编写在开头,以免给python初学者造成了不必要的误解。接下来就Shuttle类在python3中的生成操作,我们通过一个航天飞机的例子来讲解。

如果你想模拟一艘宇宙飞船,你可能要写一个新的类。但航天飞机是一种特殊形式的火箭。你可以扩展 Rocket 类,添加一些新的属性和方法,并生成一个 Shuttle 类而不是创建一个新类。

宇宙飞船的一个重要特征是它可以重复使用。所以我们加上记录飞船服役的次数。其他基础与火箭类相同。


实现一个 Shuttle 类,如下所示:

from math import sqrt
 
class Rocket():
    # Rocket simulates a rocket ship for a game,
    #  or a physics simulation.
    
    def __init__(self, x=0, y=0):
        # Each rocket has an (x,y) position.
        self.x = x
        self.y = y
        
    def move_rocket(self, x_increment=0, y_increment=1):
        # Move the rocket according to the paremeters given.
        #  Default behavior is to move the rocket up one unit.
        self.x += x_increment
        self.y += y_increment
        
    def get_distance(self, other_rocket):
        # Calculates the distance from this rocket to another rocket,
        #  and returns that value.
        distance = sqrt((self.x-other_rocket.x)**2+(self.y-other_rocket.y)**2)
        return distance
    
class Shuttle(Rocket):
    # Shuttle simulates a space shuttle, which is really
    #  just a reusable rocket.
    
    def __init__(self, x=0, y=0, flights_completed=0):
        super().__init__(x, y)
        self.flights_completed = flights_completed
        
shuttle = Shuttle(10,0,3)
print(shuttle)

当子类要继承父类时,在定义子类的括号中填写父类的类名:

class NewClass(ParentClass):

新类的__init__()函数需要调用新类的__init__()函数。新类的__init__()函数接受的参数需要传递给父类的__init__()函数。 super().__init__() 函数负责:

class NewClass(ParentClass):
    
    def __init__(self, arguments_new_class, arguments_parent_class):
        super().__init__(arguments_parent_class)
        # Code for initializing an object of the new class.

super() 函数会自动将 self 参数传递给父类。也可以使用父类的名字,但是需要手动传递self参数。如下:

class Shuttle(Rocket):
    # Shuttle simulates a space shuttle, which is really
    #  just a reusable rocket.
    
    def __init__(self, x=0, y=0, flights_completed=0):
        Rocket.__init__(self, x, y)
        self.flights_completed = flights_completed


这样写看起来可读性更高,但是我们更倾向于用 super() 的语法。当你使用 super() 的时候,不必关心父类的名字,以后有改变时会变得更加灵活。而且随着继承的学习,以后可能会出现一个子类继承自多个父类的情况,使用 super() 语法就可以在一行内调用所有父类的 __init__() 方法。

今天的航天飞机的内容很多,再加上科技的航天飞机,两者都变成了看不懂的内容。朋友们,不要气馁,多试几次就好了。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享