為什麼在只導入類時運行類定義之外的代碼?

萊諾布

期望
我想從另一個文件導入 python 類而不導入文件的其餘部分。

問題
當我使用from Exercise_7 import Vehicle(Vehicle 是類)導入類,然後運行我的代碼時,似乎來自 Exercise_7.py 的類定義之外的行也運行。

代碼

練習_7.py:

import numpy as np

class Vehicle:
  def __init__(self, typeOfVehicle, velocity, colour, electric):
    self.typeOfVehicle = str(typeOfVehicle)
    self.velocity = tuple(velocity)
    self.velocity = np.array(self.velocity)
    self.colour = str(colour)
    self.electric = bool(electric)
      
  def updateVelocity(self, velocityTuple):
    self.velocity = np.array(velocityTuple)

  def allAttributes(self):
    attributes = [self.typeOfVehicle, self.velocity, self.colour, self.electric]
    print(attributes)

  def emissions(self, distance):
    #electric vehicles
    if self.electric == True:
      if self.typeOfVehicle == "Car":
        emission = 1*distance
      elif self.typeOfVehicle == "Truck":
        emission = 5*distance

    else:  #vehicle is not electric
      if self.typeOfVehicle == "Car":
        emission = 10*distance
      elif self.typeOfVehicle == "Truck":
        emission = 50*distance
    return emission

#---TEST CODE THAT IS BEING RUN (when I don't want it to)--- 

vehicle1 = Vehicle("Car", (3,5), "red", False)
vehicle1.updateVelocity((2,6))
vehicle1.allAttributes()
print(vehicle1.emissions(100))

練習_8.py(運行時運行不需要的代碼的文件):

from Exercise_7 import Vehicle
import numpy as np
import random as r

def newVehicles(type, electric1):
    colours = ["red", "blue", "green", "black", "grey"]
    for i in range(0,50):
        velocity = (r.uniform(1,70), r.uniform(1,70))
        newVehicle = Vehicle(type, velocity, colours[r.randint(0,4)], electric1)
        vehicles.append(newVehicle)

def createVehicles():
    newVehicles("Car", True)
    newVehicles("Car", False)
    newVehicles("Truck", True)
    newVehicles("Truck", False)
    return vehicles

def calculateEmissions(vehicles, time):
    electricCarsEmissions = 0
    nonelectricCarsEmissions = 0
    electricTrucksEmissions = 0
    nonelectricTrucksEmissions = 0
    for vehicle in vehicles:
        speed = (vehicle.velocity[0]**2 + vehicle.velocity[1]**2)**1/2
        distanceTravelled = speed*time
        vehicle.distance = distanceTravelled
        emission = vehicle.emissions(distanceTravelled)
        if vehicle.typeOfVehicle == "Car" and vehicle.electric == True:
            electricCarsEmissions += emission
        elif vehicle.typeOfVehicle == "Car" and vehicle.electric == False:
            nonelectricCarsEmissions += emission
        elif vehicle.typeOfVehicle == "Truck" and vehicle.electric == True:
            electricTrucksEmissions += emission
        elif vehicle.typeOfVehicle == "Truck" and vehicle.electric == False:
            nonelectricTrucksEmissions += emission
    return electricCarsEmissions, nonelectricCarsEmissions, electricTrucksEmissions, nonelectricTrucksEmissions
    
    
vehicles = []
listOfVehicles = createVehicles()
print(calculateEmissions(listOfVehicles, 20))

當運行 Exercise_8.py 時,它輸出以下內容:

['Car', array([2, 6]), 'red', False]  #output from Exercise_7.py code
1000 #output from Exercise_7.py code
(1836161.109986278, 16586342.282856379, 7901210.428254995, 74406974.7703749) #desired output
宮城先生

模塊是可執行代碼塊,defclass語句一樣。它們僅在其整個代碼上下文中得到明確定義因此,不可能只加載模塊的一部分。

運行from Exercise_7 import Vehicle仍然需要將整個模塊加載並執行Exercise_7到解釋器中,即使它只是將名稱導入並綁定Vehicle到文件中。


不應該在常規導入期間運行的代碼應該在一個__main__守衛中

if __name__ == "__main__":
    vehicle1 = Vehicle("Car", (3,5), "red", False)
    vehicle1.updateVelocity((2,6))
    vehicle1.allAttributes()
    print(vehicle1.emissions(100))

鬆散地說,模塊__main__僅在直接執行時(例如作為)python -m Exercise_7,而不是在由另一個模塊導入時。

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

為什麼此獲取 Airflow 上下文的代碼會在 DAG 導入時運行?

為什麼在運行我的 discord.py 代碼時出現錯誤?

為什麼我需要輸入兩次才能運行代碼

為什麼我運行代碼時 elif 沒有註冊?簡單的骰子遊戲

為什麼此代碼不會導致重新定義錯誤?

這行代碼是什麼意思?以及如何創建此類的對象?

為什麼 AbstractArray 的子類型會導致 Julia 中的矩陣運算不精確?

為什麼在組件中導入 VS 硬編碼時,對像數組的行為會有所不同?

為什麼 Rust 會在方法名稱後添加泛型類型定義?

未定義類型 T 的方法visit() - 為什麼?

Woocommerce - 自定義選項卡中的短代碼自定義查詢超時 - 為什麼?

將 any 與 void 進行比較時,為什麼類型是聯合?

為什麼我的 C 代碼可以在終端中運行,而不是在使用 Code Runner 的 VS Code 中運行?

為什麼tomcat運行時jsp會渲染?

將 UML 轉換為代碼 C++。繼承問題。當任何一個類的對像被創建時,所有類的構造函數都會運行嗎?

為什麼這段代碼會導致hitbox異常?

為什麼相同的生成的彙編代碼不會導致相同的輸出?

struct 是內核源代碼中的聲明或定義還是某種類型的面向對象的行為

沒有為類“Object?”定義運算符“[]”

為什麼我的反向鍊錶代碼只返回第一個節點?

為什麼我的 java Scanner.nextLine() 代碼有時會跳過一行?

'...' 運算符有什麼作用,為什麼所有內置類方法都返回它?

為什麼當文本框為空並且調用 Len 和 Dir 時導致錯誤:13 類型不匹配

在編譯或鏈接 C 代碼期間的什麼時候隱式定義了 extern 變量?

為什麼 CSS 只調用類名的一部分?

如果類型定義已經在 package.json 中,為什麼我必須在 tsconfig.json 中指定類型

這行代碼是什麼意思?

為什麼我的 javascript 刪除卡片按鈕只在第一次工作但在後續使用時發送類型錯誤?

為什麼我的代碼沒有輸入地址?

TOP lista

  1. 1

    R Shiny: use HTML em funções (como textInput, checkboxGroupInput)

  2. 2

    O Chromium e o Firefox exibem as cores de maneira diferente e não sei qual deles está fazendo certo

  3. 3

    Como assinar digitalmente um documento PDF com assinatura e texto visíveis usando Java

  4. 4

    R Folheto. Dados de pontos de grupo em células para resumir muitos pontos de dados

  5. 5

    Gerenciar recurso shake de Windows Aero com barra de título personalizado

  6. 6

    Como obter dados API adequados para o aplicativo angular?

  7. 7

    UITextView não está exibindo texto longo

  8. 8

    Por que meus intervalos de confiança de 95% da minha regressão multivariada estão sendo plotados como uma linha de loess?

  9. 9

    Acessando relatório de campanhas na AdMob usando a API do Adsense

  10. 10

    Usando o plug-in Platform.js do Google

  11. 11

    Como posso modificar esse algoritmo de linha de visada para aceitar raios que passam pelos cantos?

  12. 12

    Dependência circular de diálogo personalizado

  13. 13

    Coloque uma caixa de texto HTML em uma imagem em uma posição fixa para site para desktop e celular

  14. 14

    iOS: como adicionar sombra projetada e sombra de traço no UIView?

  15. 15

    Como usar a caixa de diálogo de seleção de nomes com VBA para enviar e-mail para mais de um destinatário?

  16. 16

    Tabela CSS: barra de rolagem para a primeira coluna e largura automática para a coluna restante

  17. 17

    How to create dynamic navigation menu select from database using Codeigniter?

  18. 18

    Converter valores de linha SQL em colunas

  19. 19

    ChartJS, várias linhas no rótulo do gráfico de barras

  20. 20

    用@StyleableRes注释的getStyledAttributes。禁止警告

  21. 21

    não é possível adicionar dependência para com.google.android.gms.tasks.OnSuccessListener

quentelabel

Arquivo