J'ai une bonne expérience de Java et j'essaie d'apprendre le python. Je rencontre un problème pour comprendre comment accéder aux méthodes d'autres classes lorsqu'elles se trouvent dans des fichiers différents. Je continue à avoir un objet module n'est pas appelable.
J'ai créé une fonction simple pour rechercher le plus grand et le plus petit entier d'une liste dans un fichier et pour accéder à ces fonctions dans une autre classe d'un autre fichier.
Toute aide est appréciée, merci.
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' )
Le problème est dans la ligne import
. Vous importez un module, pas une classe. En supposant que votre fichier s'appelle other_file.py
(contrairement à Java, là encore, il n’existe pas de règle du type "une classe, un fichier"):
from other_file import findTheRange
si votre fichier s'appelle également findTheRange, à la suite des conventions Java, alors vous devriez écrire
from findTheRange import findTheRange
vous pouvez également l'importer comme vous l'avez fait avec random
:
import findTheRange
operator = findTheRange.findTheRange()
Quelques autres commentaires:
a) @ Daniel Roseman a raison. Vous n'avez pas du tout besoin de cours ici. Python encourage la programmation procédurale (quand cela convient, bien sûr)
b) Vous pouvez construire la liste directement:
randomList = [random.randint(0, 100) for i in range(5)]
c) Vous pouvez appeler des méthodes comme vous le faites en Java:
largestInList = operator.findLargest(randomList)
smallestInList = operator.findSmallest(randomList)
d) Vous pouvez utiliser la fonction intégrée et l’énorme bibliothèque python:
largestInList = max(randomList)
smallestInList = min(randomList)
e) Si vous voulez toujours utiliser une classe et que vous n'avez pas besoin de self
, vous pouvez utiliser @staticmethod
:
class findTheRange():
@staticmethod
def findLargest(_list):
#stuff...
from
a directory_of_modules
, vous pouvez import
a specific_module.py
specific_module.py
peut contenir un Class
avec some_methods()
ou seulement functions()
specific_module.py
, vous pouvez instancier un Class
ou appeler functions()
Class
, vous pouvez exécuter some_method()
Exemple:
#!/usr/bin/python3
from directory_of_modules import specific_module
instance = specific_module.DbConnect("username","password")
instance.login()
Extraits de PEP 8 - Guide de style pour Python Code :
Les modules doivent avoir des noms courts et minuscules.
Remarque: Les caractères de soulignement peuvent être utilisés dans le nom du module si cela améliore la lisibilité.
Un module Python est simplement un fichier source (*. Py), qui peut exposer:
Class: noms utilisant la convention "CapWords".
Fonction: noms en minuscules, mots séparés par des traits de soulignement.
Variables globales: les conventions sont à peu près les mêmes que celles des fonctions.