IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Passer un TYPE comme argument d'une méthode


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2020
    Messages : 2
    Par défaut Passer un TYPE comme argument d'une méthode
    Bonjour à tous,

    Je précise tout d'abord le sujet de mon post : je parle bien de passer un "TYPE" en argument et non pas un objet/une variable standard à une méthode.

    Par exemple, je souhaite créer une classe qui manipule une liste de "trucs".

    J'aimerais lors de la création d'un objet de cette classe (lors de l'appel d'__init__), indiquer le type de ces "trucs" pour qu'il fabrique sa liste sur la base du bon type.

    --- > Comment puis-je faire pour invoquer __init__ en lui passant en argument un type ?


    Pour être un peu plus concret :
    On peut imaginer une Classe EnsembleFigures contenant une liste de Figures.
    Au moment où je crée un objet de type EnsembleFigures, je veux lui indiquer qu'il s'agit de figures de type "Triangle"

    Piste: existe-t-il un objet de type "type" que l'on puisse passer en paramètre?


    Merci par avance pour votre aide (et votre indulgence, c'est mon 1er jour sur le forum)

    Alain.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Je ne comprends pas trop ce que vous appelez "type".
    Pour moi çà ressemble à une "class" et une "class" est un callable (on peut l'utiliser comme une fonction).
    Et on peut écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> def f(n, T):
    ...     print (repr(T(n)))
    ...
    >>> f(12, str)
    '12'
    >>> f(12, int)
    12
    >>>
    "str" et "int" sont des "types" et la fonction fabrique un machin du type demandé.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Il faut arriver à clarifier ton besoin.
    Est-ce que tu désires passer une chaine représentant le type attendu et charge à l'objet d'analyser la chaine pour détecter le vrai type (ie si l'objet se nomme "toto" alors tu l'appellerais ainsi: toto("str") ou toto("float") ou toto("int")) ; ou bien désires-tu réellement passer un vrai type au sens Python du terme ?
    Parce que dans le second cas, tu ne peux passer que des types natifs Python (str, int, float, tuple, set, dict) et non des types de ton cru ("triangle" pour reprendre ton exemple)

    Sinon quoi qu'il en soit, Python possède la fonction type() qui retourne le type d'un truc (ie type(3). Donc tu veux passer le type d'un int à une fonction tu lui passes type(int).

    Exemple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> def fct(n):
    ...     print("type=[%s]" % n)
    ... 
    >>> fct(type(int))
    type=[<class 'type'>]
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2020
    Messages : 2
    Par défaut Merci
    Merci les gars pour vos réponses super rapides.
    Wiz m'a donné la réponse en disant qu'une classe est un callable.
    J'aurais dû faire un essai. Je passe donc directement le nom de la classe dans le constructeur de mon EnsembleFigures et ça marche.

    (C'est en réalité pour développer un algo génétique "générique" dont les objets manipulés sont "

    Un GRAND merci à tous deux

    Alain.

    Pour matérialiser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    class EnsembleFigures:
    	def __init__(self, typeDeFigure):
    		self.liste = [ typeDeFigure() for i in range(3)]
     
    	def afficher(self):
    		for f in self.liste:
    			f.afficher()
     
     
    class Figure:
    	def __init(self):
    		pass
     
    	def afficher(self):
    		print("Je suis un ",self.nom)
     
    class Triangle (Figure):
    	def __init__(self):
    		self.nom = "Triangle"
     
    class Rectangle (Figure):
    	def __init__(self):
    		self.nom = "Rectangle"
     
    # Main
    ensFig = EnsembleFigures(Triangle)
    ensFig.afficher()

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par racineal Voir le message
    Je passe donc directement le nom de la classe dans le constructeur de mon EnsembleFigures et ça marche.
    oui, enfin... le soucis sera de fabriquer des figures "différentes" et de passer différents paramètres aux types de figures sinon autant créer des séquences de "T" et de "R"

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/07/2019, 15h46
  2. [Python 3.X] Passer une méthode en argument
    Par chouchou_beignet dans le forum Général Python
    Réponses: 1
    Dernier message: 16/09/2017, 21h05
  3. Passer une méthode en paramètre
    Par cheveche4 dans le forum C++
    Réponses: 4
    Dernier message: 05/04/2008, 20h39
  4. Réponses: 4
    Dernier message: 28/03/2008, 21h43
  5. [POO] passer une méthode en argument
    Par gorgonite dans le forum Langage
    Réponses: 4
    Dernier message: 09/11/2007, 18h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo