簡體   English   中英

當你在 python 中打印某個類的對象時會打印什么?

[英]What gets printed when you print a object of some class in python?

我想問一下這個具體的例子,取自官方的pytorch教程

import torch
import torch.nn as nn
import torch.nn.functional as F


class Net(nn.Module):

    def __init__(self):
        super(Net, self).__init__()
        # 1 input image channel, 6 output channels, 3x3 square convolution
        # kernel
        self.conv1 = nn.Conv2d(1, 6, 3)
        self.conv2 = nn.Conv2d(6, 16, 3)
        # an affine operation: y = Wx + b
        self.fc1 = nn.Linear(16 * 6 * 6, 120)  # 6*6 from image dimension
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

net = Net()
print(net)

輸出是

Net(
  (conv1): Conv2d(1, 6, kernel_size=(3, 3), stride=(1, 1))
  (conv2): Conv2d(6, 16, kernel_size=(3, 3), stride=(1, 1))
  (fc1): Linear(in_features=576, out_features=120, bias=True)
  (fc2): Linear(in_features=120, out_features=84, bias=True)
  (fc3): Linear(in_features=84, out_features=10, bias=True)
)

據我了解,這段代碼定義了nn.Module的子類Net ,並在其初始值設定項中定義了成員conv1conv2等。這些成員在調用print(net)print(net) 基於這種觀察,我認為如果將self.x = 0行添加到Net的初始值設定項中,則會有額外的輸出行,例如: (x): 0 但這並沒有發生。 那么誰來決定打印Net哪一部分呢?

來自Python3 文檔

代表(對象)
返回一個包含對象的可打印表示的字符串。 對於許多類型,此函數會嘗試返回一個字符串,該字符串在傳遞給 eval() 時將產生具有相同值的對象,否則表示為包含在尖括號中的字符串,其中包含對象類型的名稱附加信息通常包括對象的名稱和地址。 類可以通過定義 __repr__() 方法來控制此函數為其實例返回的內容。

由於您的類繼承了 nn.Module 類,因此它使用其repr 方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM