Comments on: Le guide ultime et définitif sur la programmation orientée objet en Python à l’usage des débutants qui sont rassurés par les textes détaillés qui prennent le temps de tout expliquer. Partie 8. http://sametmax.com/le-guide-ultime-et-definitif-sur-la-programmation-orientee-objet-en-python-a-lusage-des-debutants-qui-sont-rassures-par-les-textes-detailles-qui-prennent-le-temps-de-tout-expliquer-partie-8/ Du code, du cul Mon, 28 Oct 2019 11:54:55 +0000 hourly 1 https://wordpress.org/?v=4.9.7 By: Sam http://sametmax.com/le-guide-ultime-et-definitif-sur-la-programmation-orientee-objet-en-python-a-lusage-des-debutants-qui-sont-rassures-par-les-textes-detailles-qui-prennent-le-temps-de-tout-expliquer-partie-8/#comment-190342 Wed, 25 Oct 2017 08:11:44 +0000 http://sametmax.com/?p=6524#comment-190342 De nombreux articles meritent une mise a jour sur le site. Pour le markdown dans les comments, je vais voir.

]]>
By: guigui http://sametmax.com/le-guide-ultime-et-definitif-sur-la-programmation-orientee-objet-en-python-a-lusage-des-debutants-qui-sont-rassures-par-les-textes-detailles-qui-prennent-le-temps-de-tout-expliquer-partie-8/#comment-190305 Mon, 23 Oct 2017 12:56:29 +0000 http://sametmax.com/?p=6524#comment-190305 Je suis en python3.6, j’ai reussi à faire une metaclasse qui marche quand je l’appelle directement, en revanche je n’y arrive depuis une autre classe avec l’attribut __metaclass__.

En situation d’echec cuisant, j’ai décidé de copier coller le code, en utilisant la metaclass/fonction prefixer et la classe Ronflex.

Ben ca marche pas ! r.armure() il trouve mais pas r.attaque_armure()

Tout ca pour m’appercevoir que en Python non préhistorique on charge la metaclasse comme ca:

class Ronflex(metaclass=prefixer):

pass

Sinon ce serait possible un support pour le markdown ? Je galère un peu avec l’html pur..

]]>
By: orwel http://sametmax.com/le-guide-ultime-et-definitif-sur-la-programmation-orientee-objet-en-python-a-lusage-des-debutants-qui-sont-rassures-par-les-textes-detailles-qui-prennent-le-temps-de-tout-expliquer-partie-8/#comment-189773 Mon, 25 Sep 2017 13:02:06 +0000 http://sametmax.com/?p=6524#comment-189773 Navré pour le niveau de ma remarque :

Et je sais que certains auraient préféré MyLittlePoney, mais je fais avec ma maigre culture G.

Pony pas poney

Sinon très bon article, j’ai l’impression d’avoir compris.

]]>
By: Sam http://sametmax.com/le-guide-ultime-et-definitif-sur-la-programmation-orientee-objet-en-python-a-lusage-des-debutants-qui-sont-rassures-par-les-textes-detailles-qui-prennent-le-temps-de-tout-expliquer-partie-8/#comment-186517 Thu, 30 Mar 2017 17:21:33 +0000 http://sametmax.com/?p=6524#comment-186517 :)

]]>
By: Jc http://sametmax.com/le-guide-ultime-et-definitif-sur-la-programmation-orientee-objet-en-python-a-lusage-des-debutants-qui-sont-rassures-par-les-textes-detailles-qui-prennent-le-temps-de-tout-expliquer-partie-8/#comment-186497 Wed, 29 Mar 2017 20:00:06 +0000 http://sametmax.com/?p=6524#comment-186497 Juste excellent tant dans la pédagogie ou de la démarche explicative que de l’humour bien trouvé. Merci beaucoup ça a mis beaucoup d’ordre dans mon esprit par rapport aux differentes “recettes” que l’on peut découvrir : soit par metaclass fonction ou classe ou bien utilisation tantôt de call tantôt de new dont j’avais de la peine à voir la cohérence. Merci encore

]]>
By: Sam http://sametmax.com/le-guide-ultime-et-definitif-sur-la-programmation-orientee-objet-en-python-a-lusage-des-debutants-qui-sont-rassures-par-les-textes-detailles-qui-prennent-le-temps-de-tout-expliquer-partie-8/#comment-168910 Sun, 29 Nov 2015 13:32:55 +0000 http://sametmax.com/?p=6524#comment-168910 Ah tu veux passer des paramètres à la métaclasse au moment de l’instanciation de la classe qu’elle génère ?

La métaclasse doit être invisible à l’usage de la classe générée.

On ne passe donc rien aux métaclasse, on passe tout en paramètre à la classe, comme si c’était elle qui avait le comportement, même si ce comportement vient de la métaclasse.

Donc si tu veux passer quelque chose à la métaclasse, passe le à la classe, et la métaclasse le récupérera au moment de l’interception.

]]>
By: Goldy http://sametmax.com/le-guide-ultime-et-definitif-sur-la-programmation-orientee-objet-en-python-a-lusage-des-debutants-qui-sont-rassures-par-les-textes-detailles-qui-prennent-le-temps-de-tout-expliquer-partie-8/#comment-168800 Sat, 28 Nov 2015 16:00:50 +0000 http://sametmax.com/?p=6524#comment-168800 Ah, mille excuses, les balises code ont fait du caca dans mon commentaires… :c

]]>
By: Goldy http://sametmax.com/le-guide-ultime-et-definitif-sur-la-programmation-orientee-objet-en-python-a-lusage-des-debutants-qui-sont-rassures-par-les-textes-detailles-qui-prennent-le-temps-de-tout-expliquer-partie-8/#comment-168799 Sat, 28 Nov 2015 15:59:07 +0000 http://sametmax.com/?p=6524#comment-168799 La question que je me pose se situe surtout sur la façon de passer des paramètres à

__metaclass__

lors de l’instanciation, le fait que cela soit une classe ou autre chose ne semble pas être un soucis ici.

Par exemple:


class Truc(object):

   __metaclass__ = Meta(param)

    [...]

Truc(param=['mes', 'parametres',])

Dans le code que tu donnes, le paramètre est définit en dur dans la définition de la classe (

__metaclass__ = Prefixer(prefix='tatayoyo_')

), mais si l’on souhaite passer un paramètre dynamiquement lors de l’instanciation de la classe, il ne semble pas y avoir de possibilité de récupérer ce paramètre, à moins de passer par un scope plus global (utiliser une variable global qu’on assignera avant d’instancier la classe…).

Pour donner un autre exemple, imaginons que nous souhaiterions définir dynamiquement la metaclass à utiliser lors de l’instanciation de la classe, cela serait le même problème.

Une méthode qui me semblerait peut-être envisageable, serait de définir la classe dans une fonction prenant elle-même les paramètre afin d’avoir un scope accessible, de cette façon:


def set_class(param):

    class Maclass(object):

        __metaclass__ = MetaClass(param=param)

        [...]

    return Maclass

Maclass = set_class('mesparams')

inst = Maclass()

Mais je ne sais pas à quelle point c’est abominable (ni si cela marcherait en fait)…

(désolé, j’espère que ma question est pertinente et que je ne pollue pas le fil des commentaires ^^’)

]]>
By: Sam http://sametmax.com/le-guide-ultime-et-definitif-sur-la-programmation-orientee-objet-en-python-a-lusage-des-debutants-qui-sont-rassures-par-les-textes-detailles-qui-prennent-le-temps-de-tout-expliquer-partie-8/#comment-168698 Fri, 27 Nov 2015 16:31:10 +0000 http://sametmax.com/?p=6524#comment-168698 Les metaclass peuvent être n’importe quel callable, pas forcément une classe. Donc utiliser une lambda fonctionne :

Maclass(metaclass=lambda: Mametaclass(arg1=1, arg2=2))

ou

Maclass(object):
    __metaclass__ = lambda: Mametaclass(arg1=1, arg2=2)
]]>
By: Goldy http://sametmax.com/le-guide-ultime-et-definitif-sur-la-programmation-orientee-objet-en-python-a-lusage-des-debutants-qui-sont-rassures-par-les-textes-detailles-qui-prennent-le-temps-de-tout-expliquer-partie-8/#comment-168697 Fri, 27 Nov 2015 15:56:51 +0000 http://sametmax.com/?p=6524#comment-168697 Je ne sais pas trop si on peut encore se permettre de poser des questions, mais j’en aurais une à laquelle je peine à trouver réponse.

Dans le cas de l’utilisation d’une classe metaclass, il ne semble pas possible de passer des arguments à celle-ci lors de l’instanciation de la classe qu’elle fabrique autrement que de passer par un scope globale.

Par exemple, si l’on souhaite utiliser une méta classe afin de générer dynamiquement des attribues en fonction de paramètres, comment est-il possible de passer ces paramètres ?

Une recherche sur les interwebs montre une possibilité en python3 en utilisant Maclass(metaclass=Mametaclass, arg1=1, arg2=2) au moment de l’instanciation de la classe et en ajoutant un **kwargs à la metaclass, mais la même chose ne semble pas possible en python2.

]]>