debutant python, DP - Python - Programmation
Marsh Posté le 20-08-2007 à 10:43:15
flashball a écrit : J'ai une classe Maclasse qui a des attributs predefinis tel que |
Si tes objets avec de nouveaux attributs sont totalement différents des objets sans attribut, c'est qu'il ne s'agit pas du même objet donc qu'il te faut créer une autre classe pour ces objets là.
Sinon pourquoi ne pas mettre tous tes attributs dans la classe principale, quitte à ce que les objets qui n'en ont pas besoin aient cet attribut à vide par défaut
Code :
|
Marsh Posté le 20-08-2007 à 12:44:16
Code :
|
Marsh Posté le 20-08-2007 à 16:59:39
masklinn a écrit :
|
Ahah... explique-moi donc ce "**kwargs" ? Je présume qu'il ne s'agit pas d'un pointeur sur un pointeur...
Marsh Posté le 20-08-2007 à 18:02:36
Sve@r a écrit : |
Nope.
Dans les listes d'arguments python a deux marqueurs magiques, * et ** (habituellement utilisés avec les noms args et kwargs, respectivement, donc *args ou **kwargs, ce n'est néamoins qu'une convention).
Leurs rôles sont respectivement de récupérer les attributs positionnels (args) non spécifiés et les arguments nommés (kwargs, ou KeyWord ARGumentS) non spécifiés.
Ils servent de catchall pour respectivement les arguments positionnels (e.g. foo(1, 5, "bleh", "pouet" ) a 4 arguments positionnels) et nommés (e.g. foo(1, 5, foo="bar", baz="buzz", qux=18 a 2 arguments positionnels et 3 arguments nommés) n'ayant pas été spécifiés explicitement dans la signature de la fonction (e.g. def foo(a, b, c, *args) définit 3 arguments positionnels, et un catchall pour le reste des arguments, donc je dois lui donner au moins 3 arguments et tous les arguments supplémentaires irons dans une list args)
Limitations:
Valides:
Code :
|
à noter que le dernier et l'avant-avant dernier peuvent avoir des comportements déroutants
invalides:
Code :
|
probablement d'autres.
Si tu veux bricoler un peu pour voir comment ça marche, je te conseille d'utiliser ces fonctions là:
Code :
|
pour voir comment les arguments fournis mappent à args et kwargs
Marsh Posté le 20-08-2007 à 22:26:50
j'ai hate que le livre "Object-Oriented Programming in Python" sorte, j'en ai grand besoin merci les gars
Marsh Posté le 20-08-2007 à 22:54:18
Commences déjà par "Diving in Python"
Et il n'y a pas vraiment de "object-oriented in python", si tu connais les concepts fondamentaux de la POO tu pourras les appliquer à Python, après ce qui manque ce sont les idiômes (nb: "La POO en Java" et "La POO en PHP", ce ne sont pas "les conceptes fondamentaux de la POO)
En autres lectures intéressantes, je recommande http://dirtsimple.org/2004/12/python-is-not-java.html et le Zen of Python ("import this" dans un shell python)
Marsh Posté le 21-08-2007 à 19:37:44
ben oui justement le probleme est que les cours/livres de POO sont souvent illustres par du C++ ou du java
etant un debutant voire meme bricoleur du dimanche a l'arrachee j'aimerais bien avoir un livre sur la POO qui explique bien les notions de la POO sans en faire juste une intro,
HS:
la chose que je comprend pas pour java c'est comment on en est arrivee a une telle utilisation en entreprise, a cause de la politique de sun ?
parce que entre java et python : java n'a aucun avantage a mes yeux si ce n'est la notoriete + intergration native dans eclipse (log qui n'existait pas il y a 10 ans)
cependant si vous vous connaissez de bons bouquains sur la POO illustre en code java je reste preneur
Marsh Posté le 21-08-2007 à 20:39:38
flashball a écrit : ben oui justement le probleme est que les cours/livres de POO sont souvent illustres par du C++ ou du java |
Je t'ai déjà donné Dive, qui est un très bon bouquin sur Python (mais pas sur la prog en général), et gratuit
flashball a écrit : la chose que je comprend pas pour java c'est comment on en est arrivee a une telle utilisation en entreprise, a cause de la politique de sun ? |
marketting (il a été poussé très très fort par e.g. Sun et IBM et présenté très rapidement comme une solution miracle) + ressemblance au "langage entreprise" l'ayant directement précédé (le C++) facilitant les transferts de la masse (qui n'utilisait pas correctement ou pas du tout les fonctionalités du C++ retirée de Java, et n'a donc rien perdu)
Marsh Posté le 21-08-2007 à 21:24:19
masklinn a écrit :
|
Compris. Si je devais faire une sale analogie, je parlerais de va_args en C.
*args contient une liste d'arguments positionnels (vus de par leur ordre dans les parenthèses) => on peut parler de tableau
**kwargs contient une liste d'arguments nommés (vus par le nom qu'on leur donne) => ici on verrait bien un dictionnaire
ex:
Code :
|
masklinn a écrit : Commences déjà par "Diving in Python" |
Moi j'ai commencé par le cours de Swinnen http://www.cifen.ulg.ac.be/inforef [...] _notes.pdf que j'ai trouvé remarquablement bien fait. j'ai aussi téléchargé DiveIntoPython (conseillé par Harkonnen) mais j'ai pas eu l'occasion de m'y plonger en détails...
Marsh Posté le 21-08-2007 à 21:35:05
Sve@r a écrit : |
C'est exactement va_args (en un peu plus flexible ptet, et uniquement pour *args, me semble pas qu'il y ait des arguments nommés avec va_args si?)
Sve@r a écrit : *args contient une liste d'arguments positionnels (vus de par leur ordre dans les parenthèses) => on peut parler de tableau |
Non seulement on peut en parler, mais ils sont exactement ça, respectivement un objet de type tuple (une liste immutable) et un objet de type dict
Code :
|
Accessoirement, pour les théories POO toussa, je recommande fortement le wiki c2, il y a plein de trucs intéressants dessus: http://c2.com/cgi/wiki?ObjectOriented & http://c2.com/cgi/wiki?FindPage (gaffe par contre, les fonctions de recherches sont pourries )
Marsh Posté le 21-08-2007 à 23:12:03
masklinn a écrit : |
Non. Le C est assez bas niveau et ne permet pas la création de dictionnaires.
Rhaaa plus je découvre Python plus je l'apprécie...
Marsh Posté le 21-08-2007 à 23:59:45
Sve@r a écrit : |
Essaye de faire un truc threadé correct en python avec une gui, ça reste le seul truc pour lequel je préfère encore du C ou du C++
Marsh Posté le 22-08-2007 à 00:22:23
0x90 a écrit : |
En ne communicant qu'avec des queues (Queue.Queue), ça passe
Mais la méthode conseillée en python ça reste multiprocessus + pipes en fait (guido ne supporte pas les threads, c'est d'ailleurs une des raison pour laquelle il n'a pas envie de s'emmerder à chercher comment faire sauter le gil)
Marsh Posté le 22-08-2007 à 00:25:53
masklinn a écrit : |
Sauf que les tk graphiques sont pas pensés comme ça, donc tu l'as dans le baab.
masklinn a écrit : |
Pas con, j'ai jamais testé en pipes, 'fin ça faut du bordel aussi et faut pas vouloir de l'hyper-réactif
( ou si t'as un insert 3D au milieu par exemple, ça risque d'être un peu lourd de répartir la tâche.... )
Marsh Posté le 22-08-2007 à 00:26:30
0x90 a écrit :
|
0x90 a écrit :
( ou si t'as un insert 3D au milieu par exemple, ça risque d'être un peu lourd de répartir la tâche.... ) |
(accessoirement, les pipes toussa c'est devenu vachement plus facile depuis l'arrivée de subprocess, c'est vachement plus simple et cohérent que les os.Popen
Marsh Posté le 19-08-2007 à 15:16:35
J'ai une classe Maclasse qui a des attributs predefinis tel que
class Maclase:
def __init__(self,attributA=1,attibutB="", attibutC=[] )
self.attA=attributA
self.attB=attributB
self.attB=attributC
au moment de l'execution du progamme j'aurai besoin d'instancier un objet de cette classe mais avec des attibuts supplementaires
j'aurais besoin au final d'instancier de cette maniere
objet1=Maclasse(attibuA=1, attibutB="chaine", attibutC=[1,2,3], nouveauattribut=22)
j'ai pense a deriver la classe pour rajouter un nouvel attribut au cours de l'execution du progamme mais je vois pas comment le faire de maniere elegante puisque je vais avoir des objets avec des attributs en plus qui peuvent etre totalements differents
ca devient de la meta prog la , un patron de conception a utiliser ??