跳转至

Day 3
面向对象

预计阅读时间:30 分钟

关于本章

本章「面向对象」将介绍 Python 的面向对象编程(OOP)特性,包括类、对象、继承、多态等。

作用域与命名空间

跳过此节

如果你能直接完成下面的小测,可以跳过此节。

文档

请阅读 作用域与命名空间

预计阅读时间:5 分钟

小测:作用域与命名空间

请问,以下代码的输出是什么?

x = 10

def foo() -> None:
    x = 20
    print(x, end=' ')

foo()
print(x)




类与对象

文档

请阅读 类与对象

预计阅读时间:10 分钟

小测:类与对象

下面是(伪)多层感知机模型 MLP 的定义。

class MLP:
    def __init__(self,
        input_size: int = 784,
        hidden_size: int = 256,
        output_size: int = 10
    ) -> None:
        self.input_size = input_size
        self.hidden_size = hidden_size
        self.output_size = output_size
        self.init_weights()

    def init_weights(self) -> None:
        self.weights = [
            [[0] * self.hidden_size] * self.input_size,
            [[0] * self.output_size] * self.hidden_size
        ]

    def forward(self, x) -> None:
        pass

model = MLP(hidden_size=512)

请问,model.weights 的形状是什么?即 len(model.weights[0])len(model.weights[0][0])len(model.weights[1])len(model.weights[1][0]) 分别是多少?




继承与多态

文档

请阅读 继承与多态

预计阅读时间:10 分钟

小测:继承与多态

下面是(伪)模型基类 Model 和(伪)多层感知机模型 MLP 的定义。

class Model:
    def __init__(self, input_size: int, output_size: int) -> None:
        self.input_size = input_size
        self.output_size = output_size

    def init_weights(self) -> None:
        self.weights = []

    def get_weights(self) -> list:
        return self.weights

    def forward(self, x) -> None:
        pass

class MLP(Model):
    def __init__(self,
        input_size: int = 784,
        hidden_size: int = 256,
        output_size: int = 10
    ) -> None:
        super().__init__(input_size=input_size, output_size=output_size)
        self.hidden_size = hidden_size
        self.init_weights()

    def init_weights(self) -> None:
        self.weights = [
            [[0] * self.hidden_size] * self.input_size,
            [[0] * self.output_size] * self.hidden_size
        ]

    def forward(self, x) -> None:
        pass

请问,以下代码的输出是什么?

model = MLP(hidden_size=1024)
print(model.get_weights())





评论