je suivant la classe simplifiée nommée Password.py
dans folder1
:Utilisation correcte des méthodes statiques
import random
CHARS = "ABC"
class PasswordHelper(object):
@staticmethod
def generateChars(length):
return ''.join(random.choice(CHARS) for x in range(length))
Maintenant, j'ai une autre classe TestClass.py
dans folder2
:
sys.path.append('../folder1/')
import Password
class Tester:
def whatever(self):
print Password.generateChars(3)
def main():
x = Tester()
x.whatever()
# call main method
main()
Lorsque vous appelez python TestClass.py
je reçois l'erreur suivante: AttributeError: l'objet 'module' n'a pas d'attribut 'generateChars'. Les deux dossiers sont au même niveau. Y a-t-il un problème avec la façon dont j'importe les fichiers de classe ou avec la déclaration de méthode statique elle-même?
+1 NB même si vous avez un état, il peut être judicieux de passer cet état en argument et de renvoyer des valeurs. Mais c'est une question de goût, d'abord se débarrasser de l'état d'esprit "classes pour * tout *". – delnan
Hmm. Bien. Je pensais sérieusement qu'avoir une classe pour tout était considéré comme un bon style. Je suppose que j'avais tort ... – cherrun
En fait je me demande, pourquoi exactement c'est mauvais d'avoir des cours pour tout? Y a-t-il plus de lectures "plus profondes"? – cherrun