个性化阅读
专注于IT技术分析

Python内部类

本文概述

你可能听说过Python中的嵌套函数。如果你知道这意味着什么, 那么了解内部/嵌套类就是什么。我们将在这里的内部或嵌套类中探索一些新事物。

栏目

1.内部或嵌套类

2.为什么选择内部类

3.编码内部类

3.1。多个内部课程

3.2。多层次内部课程

1.内部或嵌套类

内部或嵌套类是在另一个类中定义的。请参阅内部或嵌套类的结构。

## outer class
class Outer:

    ## inner class
    class Inner:
        pass

        ## multilevel inner class
        class InnerInner:
            pass

    ## another inner class
    class _Inner:
        pass

    ## ...

    pass

2.为什么选择内部课程?

  1. 两个或更多类的分组。假设你有两个类Car和Engine。每辆汽车都需要一个引擎。但是, 没有汽车就不会使用引擎。因此, 你使引擎成为了汽车的内部类。它有助于保存代码。
  2. 隐藏代码是嵌套类的另一种用法。你可以对外界隐藏嵌套类。
  3. 很容易理解这些类。这里的课程紧密相关。你不必在代码中搜索类。他们在一起。

内部或嵌套类不是Python中最常用的功能。但是, 实现代码可能是一个很好的功能。使用内部或嵌套类时, 代码易于组织。

3.编码内部类

实现内部或嵌套类并不困难。你可以在此处查看代码的结构。

你可以使用self关键字访问外部类中的内部类。因此, 你可以根据需要快速创建内部类的实例并在外部类中执行操作。但是, 你不能在内部类中访问外部类。让我们看下面的例子。

class Outer:
    """Outer Class"""

    def __init__(self):
        ## instantiating the 'Inner' class
        self.inner = self.Inner()

    def reveal(self):
        ## calling the 'Inner' class function display
        self.inner.inner_display("Calling Inner class function from Outer class")

    class Inner:
        """Inner Class"""

        def inner_display(self, msg):
            print(msg)

现在, 你将创建Outer类的实例, 并调用它的Reveal()方法来执行Inner类的方法inner_display()。

## creating an instance of the 'Outer' class
outer = Outer()
## calling the 'reveal()' method
outer.reveal()
Calling Inner class function from Outer class

让我们看看另一种访问内部类的方法。这种方式效率较低。

Outer().Inner().inner_display("Calling the Inner class method directly")
Calling the Inner class method directly

如果要在外部类之外创建内部类的实例怎么办?你能做到吗?是的, 让我们看看如何在外部类之外创建内部类的实例。

outer = Outer()

## instantiating the inner class
inner = outer.Inner() ## inner = Outer().Inner() or inner = outer.inner
inner.inner_display("Just Print It!")
Just Print It!

3.1。多个内部课程

这是一个包含多个内部类的类。一个类中可以有多个内部类。正如我们前面定义的, 很容易实现多个内部类。

class Outer:
    """Outer Class"""

    def __init__(self):
        ## Instantiating the 'Inner' class
        self.inner = self.Inner()
        ## Instantiating the '_Inner' class
        self._inner = self._Inner()

    def show_classes(self):
        print("This is Outer class")
        print(inner)
        print(_inner)

    class Inner:
        """First Inner Class"""

        def inner_display(self, msg):
            print("This is Inner class")
            print(msg)

    class _Inner:
        """Second Inner Class"""

        def inner_display(self, msg):
            print("This is _Inner class")
            print(msg)

    ## ...

访问这些类与我们之前所做的相同。请参阅示例以更好地理解。

## instantiating the classes

## 'Outer' class
outer = Outer()
## 'Inner' class
inner = outer.Inner() ## inner = outer.inner or inner = Outer().Inner()
## '_Inner' class
_inner = outer._Inner() ## _inner = outer._outer or _inner = Outer()._Inner()

## calling the methods
outer.show_classes()

print()

## 'Inner' class
inner.inner_display("Just Print It!")

print()

## '_Inner' class
_inner.inner_display("Just Show It!")
This is Outer class
<__main__.Outer.Inner object at 0x0000021B37962048>
<__main__.Outer._Inner object at 0x0000021B37962160>

This is Inner class
Just Print It!

This is _Inner class
Just Show It!

3.2。多层次内部课程

在多层内部类中, 内部类包含另一个类, 该内部类是上一个类的内部类。你可以在此处查看此层次结构的结构:

class Outer:
    """Outer Class"""

    def __init__(self):
        ## instantiating the 'Inner' class
        self.inner = self.Inner()
        ## instantiating the multilevel 'InnerInner' class
        self.innerinner = self.inner.InnerInner()

    def show_classes(self):
        print("This is Outer class")
        print(inner)

    ## inner class
    class Inner:
        """First Inner Class"""

        def __init__(self):
            ## instantiating the 'InnerInner' class
            self.innerinner = self.InnerInner()

        def show_classes(self):
            print("This is Inner class")
            print(self.innerinner)

        ## multilevel inner class
        class InnerInner:

            def inner_display(self, msg):
                print("This is multilevel InnerInner class")
                print(msg)

        def inner_display(self, msg):
            print("This is Inner class")
            print(msg)

    ## ...

让我们看看如何实例化多层内部类。

outer = Outer()

inner = outer.Inner()

## this is 'InnerInner' class instance
innerinner = inner.InnerInner() ## innerinner = Outer().Inner().InnerInner()

## let's call its method inner_display
innerinner.inner_display("Just Print It!")
This is multilevel InnerInner class
Just Print It!

总结

希望你现在了解内部类的概念。现在是时候尝试嵌套类了。快乐编码:)

如果你想了解有关类的更多信息, 请参加srcmini的Python面向对象编程课程。

赞(0)
未经允许不得转载:srcmini » Python内部类

评论 抢沙发

评论前必须登录!