it-swarm.com.de

Das Objekt 'module' ist nicht aufrufbar. Die Methode wird in einer anderen Datei aufgerufen

Ich habe einen guten Hintergrund in Java und versuche, Python zu lernen. Ich habe ein Problem damit, wie ich auf Methoden aus anderen Klassen zugreifen kann, wenn sie sich in anderen Dateien befinden. Ich bekomme immer Modulobjekt ist nicht aufrufbar.

Ich habe eine einfache Funktion erstellt, um die größte und kleinste Ganzzahl in einer Liste in einer Datei zu finden und auf diese Funktionen in einer anderen Klasse in einer anderen Datei zuzugreifen.

Jede Hilfe ist dankbar, danke.

class findTheRange():

    def findLargest(self, _list):
        candidate = _list[0]
        for i in _list:
            if i > candidate:
                candidate = i
        return candidate

    def findSmallest(self, _list):
        candidate = _list[0]
        for i in _list:
            if i < candidate:
                candidate = i
        return candidate

 import random
 import findTheRange

 class Driver():
      numberOne = random.randint(0, 100)
      numberTwo = random.randint(0,100)
      numberThree = random.randint(0,100)
      numberFour = random.randint(0,100)
      numberFive = random.randint(0,100)
      randomList = [numberOne, numberTwo, numberThree, numberFour, numberFive]
      operator = findTheRange()
      largestInList = findTheRange.findLargest(operator, randomList)
      smallestInList = findTheRange.findSmallest(operator, randomList)
      print(largestInList, 'is the largest number in the list', smallestInList, 'is the                smallest number in the list' )
39

Das Problem liegt in der import -Zeile. Sie importieren ein Modul, keine Klasse. Angenommen, Ihre Datei heißt other_file.py (im Gegensatz zu Java gibt es keine Regel wie "eine Klasse, eine Datei"):

from other_file import findTheRange

wenn Ihre Datei auch den Namen findTheRange trägt, sollten Sie gemäß den Java-Konventionen schreiben

from findTheRange import findTheRange

sie können es auch wie mit random importieren:

import findTheRange
operator = findTheRange.findTheRange()

Einige andere Kommentare:

a) @Daniel Roseman ist richtig. Sie brauchen hier überhaupt keinen Unterricht. Python fördert die prozedurale Programmierung (wenn es passt, natürlich)

b) Sie können die Liste direkt erstellen:

  randomList = [random.randint(0, 100) for i in range(5)]

c) Sie können Methoden wie in Java aufrufen:

largestInList = operator.findLargest(randomList)
smallestInList = operator.findSmallest(randomList)

d) Sie können die eingebaute Funktion und die riesige python Bibliothek verwenden:

largestInList = max(randomList)
smallestInList = min(randomList)

e) Wenn Sie immer noch eine Klasse verwenden möchten und self nicht benötigen, können Sie @staticmethod:

class findTheRange():
    @staticmethod
    def findLargest(_list):
        #stuff...
70
Elazar
  • from a directory_of_modules, können Sie import a specific_module.py
  • dieses specific_module.py kann ein Class mit some_methods() oder nur functions() enthalten.
  • von einem specific_module.py können Sie ein Class instanziieren oder functions() aufrufen.
  • von diesem Class können Sie some_method() ausführen

Beispiel:

#!/usr/bin/python3
from directory_of_modules import specific_module
instance = specific_module.DbConnect("username","password")
instance.login()

Auszüge aus PEP 8 - Style Guide für Python Code :

Module sollten kurze Namen mit Kleinbuchstaben haben.

Hinweis: Unterstriche können im Modulnamen verwendet werden, wenn dies die Lesbarkeit verbessert.

Ein Python -Modul ist einfach eine Quelldatei (* .py), die Folgendes offenlegen kann:

  • Klasse: Namen unter Verwendung der "CapWords" -Konvention.

  • Funktion: Namen in Kleinbuchstaben, Wörter durch Unterstriche getrennt.

  • Globale Variablen: Die Konventionen entsprechen in etwa denen für Funktionen.

2
ivanleoncz