Python 类和面向对象编程

时间:2022-03-12作者:klpeng分类:Python浏览:661评论:0

编写类以将代码组织和构造成有意义的块,然后可用于实现业务逻辑。 这些实现的使用方式是将更复杂的部分抽象出来以提供更简单的接口,然后可以使用这些接口构建更简单的块。 这样做时,我们会发现很多时候我们需要在我们构建的类之间建立关系。 然后可以使用继承或组合来建立这些关系。

在本教程中,您将了解如何使用继承和组合以及所需的语法在类之间建立关系。

+Python继承

什么是继承

在继承中,一个对象基于另一个对象。 实现继承时,在基类中定义的方法和属性也将出现在继承的类中。 这通常是为了抽象出多个类中的相似代码。 抽象代码将驻留在基类中,而以前的类现在将从基类继承。

如何在 Python 中实现继承

Python允许类通过继承从其他类继承常用的属性和方法。 我们可以通过以下方式定义一个基类:

class DerivedClassName(BaseClassName):
    pass

让我们看一个继承的例子。 在以下示例中,Rocket 是基类,MarsRover 是继承类。

class Rocket:
    def __init__(self, name, distance):
        self.name = name
        self.distance = distance

    def launch(self):
        return "%s has reached %s" % (self.name, self.distance)


class MarsRover(Rocket): # inheriting from the base class
    def __init__(self, name, distance, maker):
        Rocket.__init__(self, name, distance)
        self.maker = maker

    def get_maker(self):
        return "%s Launched by %s" % (self.name, self.maker)


if __name__ == "__main__":
    x = Rocket("simple rocket", "till stratosphere")
    y = MarsRover("mars_rover", "till Mars", "ISRO")
    print(x.launch())
    print(y.launch())
    print(y.get_maker())

上面代码的输出如下所示:

➜ Documents python rockets.py
simple rocket has reached till stratosphere
mars_rover has reached till Mars
mars_rover Launched by ISRO

+Python 组合:

什么是作曲

在组合中,我们不是从基类继承,而是通过使用引用其他对象的实例变量来建立类之间的关系。 就伪代码而言,您可能会说.

class GenericClass:
    define some attributes and methods

class ASpecificClass:
    Instance_variable_of_generic_class = GenericClass

# use this instance somewhere in the class
    some_method(Instance_variable_of_generic_class)

因此,您将实例化基类,然后将实例变量用于任何业务逻辑。

+如何在 Python 中实现组合

要实现组合,您可以实例化类中的其他对象,然后使用这些实例。 例如,在下面的示例中,我们使用 self.rocket 实例化 Rocket 类,然后在方法 get_maker 中使用 self.rocket。

class MarsRoverComp():
    def __init__(self, name, distance, maker):
        self.rocket = Rocket(name, distance) # instantiating the base

        self.maker = maker

    def get_maker(self):
        return "%s Launched by %s" % (self.rocket.name, self.maker)


if __name__ == "__main__":
    z = MarsRover("mars_rover2", "till Mars", "ISRO")
    print(z.launch())
    print(z.get_maker())

具有继承和组合的总代码的输出如下所示:

➜ Documents python rockets.py
simple rocket has reached till stratosphere
mars_rover has reached till Mars
mars_rover Launched by ISRO
mars_rover2 has reached till Mars
mars_rover2 Launched by ISRO
打赏
文章版权声明:除非注明,否则均为彭超的博客原创文章,转载或复制请以超链接形式并注明出处。
相关推荐

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

猜你喜欢