mal grundsaetzlich: python vs. php...etc
ahoi und guten tag...
ich komme aus der c++/php ecke und moechte mich jetz noch
naeher mit einer weitern sprache beschaeftigen.
ruby finde ich ganz toll, aber das ist noch sowenig verbreitet auf den
servern.
wie ist es eigendlich mit python?
was sind die vorteieln gegenueber zb. php? fuer welche probleme/loesungen eignet sich python ganz besonders, fuer welche nich?
wie ist es mit sql (postrge und mysql)
kann python auch standalone?
fragen ueber fragen
ich komme aus der c++/php ecke und moechte mich jetz noch
naeher mit einer weitern sprache beschaeftigen.
ruby finde ich ganz toll, aber das ist noch sowenig verbreitet auf den
servern.
wie ist es eigendlich mit python?
was sind die vorteieln gegenueber zb. php? fuer welche probleme/loesungen eignet sich python ganz besonders, fuer welche nich?
wie ist es mit sql (postrge und mysql)
kann python auch standalone?
fragen ueber fragen

erst hatte ich ein problem mit einer
invalid session, musste den beitrag nochmal schreiben,
dann sagt das forum mir: benutztername is schon weg,
muste mich neu einloggen, dann ging es..
komisch..diese bb boards sind doch sonst ziemlich fehlerfrei??
viellecht bin ich ja uach zu doff..
naegal
ahoi und guten tag...
ich komme aus der c++/php ecke und moechte mich jetz noch
naeher mit einer weitern sprache beschaeftigen.
ruby finde ich ganz toll, aber das ist noch sowenig verbreitet auf den
servern.
wie ist es eigendlich mit python?
was sind die vorteieln gegenueber zb. php? fuer welche probleme/loesungen eignet sich python ganz besonders, fuer welche nich?
wie ist es mit sql (postrge und mysql)
kann python auch standalone?
fragen ueber fragen
-
- User
- Beiträge: 21
- Registriert: Donnerstag 5. Februar 2004, 16:12
- Wohnort: Mainz
- Kontaktdaten:
Also, für php brauchst du immer einen Server, für python nicht.
Das wichtigste an python ist aber eigentlich, das man die sprache in ihrer ganzen mächtigkeit sehr schnell verstehen kann. Das ist natürlich ideal für das, wofür python auch gedacht ist: Rapid Prototyping. Entwicklungszeit für Projekte ist einfach extrem klein...
Greetings
Aron
Das wichtigste an python ist aber eigentlich, das man die sprache in ihrer ganzen mächtigkeit sehr schnell verstehen kann. Das ist natürlich ideal für das, wofür python auch gedacht ist: Rapid Prototyping. Entwicklungszeit für Projekte ist einfach extrem klein...
Greetings
Aron
The best view of ones Soul you get
from a little bit over the edge
looking back
from a little bit over the edge
looking back
Hi. Also Python ist eine schöne einfache, aber mächtige Sprache. Da man immer mit dem guten anfängt, tu ich das auch mal:
- Python hat im Gegensatz zu PHP ein sehr einfaches Konzept für OOP
- die Sprache ist minimalistisch, also es ist so wenig wie nötig eingebaut, aber du wirst trotzdem nix missen, da es zig Module gibt.
- in geschwindigkeitskritischen Teilen kannst du auf C umsteigen, dir dort was basteln und diesen Code dann aus Python heraus importieren (mit entsprechender Geschwindigkeit)
Python ist allerdings minimalistisch (was ich gutheiße). Das heißt, es ist so wenig wie nötig integriert. Die meiste Funktionalität steckt in der OOP und in den Modulen von Python. MySQL wirst du allerdings nachrüsten müssen, es existiert ein Modul für den Zugriff (MySQLdb), was aber nicht integriert ist.
Noch mehr Informationen findest du hier, da wurde schon mal was ähnliches gefragt...
Milan
- Python hat im Gegensatz zu PHP ein sehr einfaches Konzept für OOP
- die Sprache ist minimalistisch, also es ist so wenig wie nötig eingebaut, aber du wirst trotzdem nix missen, da es zig Module gibt.
- in geschwindigkeitskritischen Teilen kannst du auf C umsteigen, dir dort was basteln und diesen Code dann aus Python heraus importieren (mit entsprechender Geschwindigkeit)
Python ist allerdings minimalistisch (was ich gutheiße). Das heißt, es ist so wenig wie nötig integriert. Die meiste Funktionalität steckt in der OOP und in den Modulen von Python. MySQL wirst du allerdings nachrüsten müssen, es existiert ein Modul für den Zugriff (MySQLdb), was aber nicht integriert ist.
Noch mehr Informationen findest du hier, da wurde schon mal was ähnliches gefragt...
Milan
also ich bin immer noch absoluter Ruby-fan.
Python finde ich dennoch sehr sympatisch und modern.
interessant, wenn auch etwas alt, ist folgender post:
gekürzter Link
ich las das und fand es ziemlich übertrieben pro-Ruby...und zum teil nicht korrekt.
wie auch immer, der urheber ist (war?) Python-programmierer
und ich bin ziemlich erstaunt.
ich kenne bisher keinen Ruby-programmierer, der Python besonders mag...dauernd wird über "die sache mit den indents" gestritten.
aber davon abgesehen: der einzige vorteil, den ich bisher (1 woche
)gesehen habe: Python ist erstaunlich schnell, gerade was schleifen und strings angeht.
gibt es hier jemanden, der beide sprachen gut genug kennt und die vorteile von Python gegenüber Ruby mal beschreiben kann?
Python finde ich dennoch sehr sympatisch und modern.
interessant, wenn auch etwas alt, ist folgender post:
gekürzter Link
ich las das und fand es ziemlich übertrieben pro-Ruby...und zum teil nicht korrekt.
wie auch immer, der urheber ist (war?) Python-programmierer

ich kenne bisher keinen Ruby-programmierer, der Python besonders mag...dauernd wird über "die sache mit den indents" gestritten.
aber davon abgesehen: der einzige vorteil, den ich bisher (1 woche

gibt es hier jemanden, der beide sprachen gut genug kennt und die vorteile von Python gegenüber Ruby mal beschreiben kann?
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi murphy,
ich kenn ja nun einige Programmiersprachen und habe im Laufe der Zeit auch in vielen gecodet. Ruby habe ich mir natürlich auch schon angeschaut, kann mich aber mit einigen Sachen dort nicht wirkich anfreunden.
1. das leidige end bei Blöcken, ich rücke Blöcke schon immer ein, ausser bei Basic und Assembler, die das nicht vertragen. Gerade das bei Python Blöcke durch die Einrückung definiert sind fand ich von Anfang an schön
2. daß man bei Methoden vor dem Namen bei der Deklaration nochmal den Klassennamen angeben muss.
3. die in vielen Fällen sehr Perlartige Syntax von Ruby hat mich auch abgeschreckt, wie damals als ich eine Sprache für Websachen suchte und zum Glück nach Perl dann PHP entdeckte.
4. keine Möglichkeit von Mehrfachvererbung unter Ruby. Ich vermeide Mehrfachvererbung zwar nach Möglichkeit, aber manchmal ist es sehr praktisch ein Objekt von str und einer anderen Klasse abzuleiten.
Dem Text in dem Link merkt man sein Alter wirklich an. Dort wird gesagt daß bei Ruby eben alles ein Objekt ist. Seit Python Version 2.1 gilt das auch für Python.
Einen Vorteil sehe ich auch darin, daß ich bei Python frei bin imperativ, funktional oder objektorientiert zu programmieren und das innerhalb eines Scripts, so wie es die Problemstellung eben erfordert.
Gruß
Dookie
ich kenn ja nun einige Programmiersprachen und habe im Laufe der Zeit auch in vielen gecodet. Ruby habe ich mir natürlich auch schon angeschaut, kann mich aber mit einigen Sachen dort nicht wirkich anfreunden.
1. das leidige end bei Blöcken, ich rücke Blöcke schon immer ein, ausser bei Basic und Assembler, die das nicht vertragen. Gerade das bei Python Blöcke durch die Einrückung definiert sind fand ich von Anfang an schön

2. daß man bei Methoden vor dem Namen bei der Deklaration nochmal den Klassennamen angeben muss.
3. die in vielen Fällen sehr Perlartige Syntax von Ruby hat mich auch abgeschreckt, wie damals als ich eine Sprache für Websachen suchte und zum Glück nach Perl dann PHP entdeckte.
4. keine Möglichkeit von Mehrfachvererbung unter Ruby. Ich vermeide Mehrfachvererbung zwar nach Möglichkeit, aber manchmal ist es sehr praktisch ein Objekt von str und einer anderen Klasse abzuleiten.
Dem Text in dem Link merkt man sein Alter wirklich an. Dort wird gesagt daß bei Ruby eben alles ein Objekt ist. Seit Python Version 2.1 gilt das auch für Python.
Einen Vorteil sehe ich auch darin, daß ich bei Python frei bin imperativ, funktional oder objektorientiert zu programmieren und das innerhalb eines Scripts, so wie es die Problemstellung eben erfordert.
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Der Vorteil von Python ist, dass du im Gegensatz zu PHP Module auf einem Webserver selbst nachrüsten kannst, auch wenn du keine Shell hast.
TUFKAB – the user formerly known as blackbird
-
- User
- Beiträge: 34
- Registriert: Samstag 24. Juli 2004, 19:25
- Kontaktdaten:
Noch ein unterschied von ruby und python:
Bei Python gilt "explicit is better than implecit"... das hast du bei ruby nie...
A.b ist das gleiche wie a.b() in ruby zb... finde ich persönlich nicht so toll und bin deswegen u.a. pythonanhänger...
ruby ist auch um einiges langsamer als python... und gegen python+psyco sieht es total alt aus...
und @topic
zu php sag ich nur quick&dirty
Bei Python gilt "explicit is better than implecit"... das hast du bei ruby nie...
A.b ist das gleiche wie a.b() in ruby zb... finde ich persönlich nicht so toll und bin deswegen u.a. pythonanhänger...
ruby ist auch um einiges langsamer als python... und gegen python+psyco sieht es total alt aus...
und @topic
zu php sag ich nur quick&dirty

-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Jep. Python hat eine klare Struktur und OOP auch wenn die Ruby Leute uns sagen wollen dass das nicht so ist *g*.Sorgenkind hat geschrieben:zu php sag ich nur quick&dirty
Aber Ruby kann afaik auch eine Art Mehrfachvererbung durch sogenannte Mixins, von denen murphy uns sicher einiges erzählen kann.
Ich hatte die Wahl zwischen Python weiterlernen und es auch auf Webseiten einzusetzen, obwohl kaum Hoster Python anbieten, oder PHP. Aber in PHP hab ich es nur zusammengebracht ein kleines Newssystem zu schreiben, und danach habe ich festgestellt das mir PHP nicht wirklich gefällt. Seit dem nurtze ich auch für Webseiten Spyce und bin froh drüber.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
wie immer der erster und wichtigster punkt für alle Python-programmiererDookie hat geschrieben:1. das leidige end bei Blöcken

da ich meine bisherigen bedenken zu nichtredundanten indents (oder wie nennt ihr das?) nicht einfach kopieren will, link zum thread im Ruby-forum:
http://www.rubyforen.de/ptopic,2191.html#2191
kritik erwünscht

muss man nicht. was du meinst, ist vermutlich folgendes:2. daß man bei Methoden vor dem Namen bei der Deklaration nochmal den Klassennamen angeben muss.
Code: Alles auswählen
class Foo
def Foo.bar
...
Code: Alles auswählen
class Foo
def bar
...
ja, Ruby kann fast wie Perl aussehen, wenn du magst. es kann auch (semantisch) wie Smalltalk aussehen. oder wie Haskell oder Delphi oder Python. das ist die freiheit von Ruby.3. die in vielen Fällen sehr Perlartige Syntax von Ruby hat mich auch abgeschreckt, wie damals als ich eine Sprache für Websachen suchte und zum Glück nach Perl dann PHP entdeckte.
Matz (Erfinder von Ruby) mochte an Perl vor allem die möglichkeit, einfache dinge ganz kurz hinzuschreiben. Perl erkauft sich das mit z.T. grausligem zeichenwust, Ruby dämmt diesen wust ein und packt alles in eine solide OO-struktur: /Regexps/, $1, if-modifier können den code lesbarer machen, wenn man sie gut einsetzt. darum gibt es sie auch in Ruby. im unterschied zu Python wollte man bei Ruby ganz klar auch Perl-ideen weiterentwickeln.
PHP ist auch nicht ganz frei von allen Perl-kürzeln, aber dafür frei von gutem design

4. keine Möglichkeit von Mehrfachvererbung unter Ruby. Ich vermeide Mehrfachvererbung zwar nach Möglichkeit, aber manchmal ist es sehr praktisch ein Objekt von str und einer anderen Klasse abzuleiten.
das ist ein größeres thema. falls Dookie mit "von str ableiten" meint, dass das objekt fähigkeiten von einer anderen Klasse übernehmen soll: genau das tun mixins. ein paar infos hier:Aber Ruby kann afaik auch eine Art Mehrfachvererbung durch sogenannte Mixins, von denen murphy uns sicher einiges erzählen kann.
http://www.approximity.com/rubybuch2/node72_main.html
http://www.rubygarden.org/faq/section/show/8
@Dookie: bitte poste mal ein beispiel für eine sinnvolle mehrfachvererbung.
sind klassen objekte? was ist mit true, null oder 0? kann ich sie auch syntaktisch als objekte behandeln, also 0.abs() oder null.__str__() ? ich kenne Python leider nicht gut genug.Dem Text in dem Link merkt man sein Alter wirklich an. Dort wird gesagt daß bei Ruby eben alles ein Objekt ist. Seit Python Version 2.1 gilt das auch für Python.
genau das kann man in Ruby auch. beim funktionalen gibt's defizite, das stimmt, aber ich habe gehört, dass Python's lambda auch seine grenzen hat.Einen Vorteil sehe ich auch darin, daß ich bei Python frei bin imperativ, funktional oder objektorientiert zu programmieren und das innerhalb eines Scripts, so wie es die Problemstellung eben erfordert.
Python ist mit sicherheit klarer als Perl und objektorientierter als C++.Leonidas hat geschrieben:Python hat eine klare Struktur und OOP auch wenn die Ruby Leute uns sagen wollen dass das nicht so ist *g*.
ich finde die tendenz von Python zu funktionen (damit meine ich alles, was keinen empfänger hat wie len) nicht sinnvoll...warum nicht "test".len()?
noch was: die zwingenden klammern bei funktionen verhindern schöne methodenreihen, wie sie in Ruby allgegenwärtig sind:
Code: Alles auswählen
input = DATA.read.split "----\n"
was meinst du damit? dass die klammern optional sind?Sorgenkind hat geschrieben:A.b ist das gleiche wie a.b() in ruby zb... finde ich persönlich nicht so toll
ach noch ein wenig selbstkritik, damit das ganze nicht zum glaubenskrieg ausartet:
http://www.rubyist.net/~matz/slides/rc2 ... 00004.html
Jo. Bei dem Code siehst du den Unterschied:murphy hat geschrieben:was meinst du damit? dass die klammern optional sind?Sorgenkind hat geschrieben:A.b ist das gleiche wie a.b() in ruby zb... finde ich persönlich nicht so toll
Code: Alles auswählen
class A:
x=1
def xy(self):
return self.x
a=A()
#Methode aufrufen und Methode zurückgeben sind 2 Dinge
print a.xy()
print a.xy
print (lambda f:f())(a.xy)
#Attribute gibts auch noch
print a.x
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Murpy,
geht natürlich auch in Python. Die Klammern zeigen das es eben ein Methodenaufruf ist und nicht die Methode. Du kannst ja z.B. bei GUI-Programmierung auch eine Methode an eine Widgetaktion binden.
Hier braucht man die Unterscheidung, ob der Rückgabewert der Funktion oder die Funktion selbst als Parameter gemeint ist.
Methoden sind bei Python eben auch nur Attribute einer Instanz. So kannst Du z.B. in Python mit
testen ob foo eine write-Methode hat oder nicht.
Gruß
Dookie
Naja, das war das erste was mir bei Python positivermassen aufgefallen ist. Ich hab früher viel in Modula2 und Oberon2 gemacht, da waren auch die begin...end nötig, ich hab mir dann auf eine Tastenkombi ein Macro gelegt, daß mir das tippen von begin...end erspartemurphy hat geschrieben:wie immer der erster und wichtigster punkt für alle Python-programmiererDookie hat geschrieben:1. das leidige end bei Blöckenich finde das ein wenig kindisch, weil es wichtigere dinge gibt als ein paar eingesparte end's. warum muss Python so was experimentelles haben?
da ich meine bisherigen bedenken zu nichtredundanten indents (oder wie nennt ihr das?) nicht einfach kopieren will, link zum thread im Ruby-forum:
http://www.rubyforen.de/ptopic,2191.html#2191
kritik erwünschtaber ich glaube, wir sollten uns auf wichtigere kriterien konzentrieren.

Aha, bei den Beispielen die ich zu Ruby fand, waren alle Methoden wie Foo.bar definiertmurphy hat geschrieben:muss man nicht. was du meinst, ist vermutlich folgendes:2. daß man bei Methoden vor dem Namen bei der Deklaration nochmal den Klassennamen angeben muss.das ist eine klassenmethode (was mir in Python leider fehlt.) normalerweise benutzt man instanzmethoden, genau wie in Python:Code: Alles auswählen
class Foo def Foo.bar ...
kein Foo nötig.Code: Alles auswählen
class Foo def bar ...

ditomurpy hat geschrieben:ja, Ruby kann fast wie Perl aussehen, wenn du magst. es kann auch (semantisch) wie Smalltalk aussehen. oder wie Haskell oder Delphi oder Python. das ist die freiheit von Ruby.3. die in vielen Fällen sehr Perlartige Syntax von Ruby hat mich auch abgeschreckt, wie damals als ich eine Sprache für Websachen suchte und zum Glück nach Perl dann PHP entdeckte.
Matz (Erfinder von Ruby) mochte an Perl vor allem die möglichkeit, einfache dinge ganz kurz hinzuschreiben. Perl erkauft sich das mit z.T. grausligem zeichenwust, Ruby dämmt diesen wust ein und packt alles in eine solide OO-struktur: /Regexps/, $1, if-modifier können den code lesbarer machen, wenn man sie gut einsetzt. darum gibt es sie auch in Ruby. im unterschied zu Python wollte man bei Ruby ganz klar auch Perl-ideen weiterentwickeln.
PHP ist auch nicht ganz frei von allen Perl-kürzeln, aber dafür frei von gutem designleider muss ich trotzdem da drin programmieren!
ok, da überleg ich mir mal was.murpy hat geschrieben:4. keine Möglichkeit von Mehrfachvererbung unter Ruby. Ich vermeide Mehrfachvererbung zwar nach Möglichkeit, aber manchmal ist es sehr praktisch ein Objekt von str und einer anderen Klasse abzuleiten.das ist ein größeres thema. falls Dookie mit "von str ableiten" meint, dass das objekt fähigkeiten von einer anderen Klasse übernehmen soll: genau das tun mixins. ein paar infos hier:Aber Ruby kann afaik auch eine Art Mehrfachvererbung durch sogenannte Mixins, von denen murphy uns sicher einiges erzählen kann.
http://www.approximity.com/rubybuch2/node72_main.html
http://www.rubygarden.org/faq/section/show/8
@Dookie: bitte poste mal ein beispiel für eine sinnvolle mehrfachvererbung.
murpy hat geschrieben:sind klassen objekte? was ist mit true, null oder 0? kann ich sie auch syntaktisch als objekte behandeln, also 0.abs() oder null.__str__() ? ich kenne Python leider nicht gut genug.Dem Text in dem Link merkt man sein Alter wirklich an. Dort wird gesagt daß bei Ruby eben alles ein Objekt ist. Seit Python Version 2.1 gilt das auch für Python.
genau das kann man in Ruby auch. beim funktionalen gibt's defizite, das stimmt, aber ich habe gehört, dass Python's lambda auch seine grenzen hat.Einen Vorteil sehe ich auch darin, daß ich bei Python frei bin imperativ, funktional oder objektorientiert zu programmieren und das innerhalb eines Scripts, so wie es die Problemstellung eben erfordert.
Python ist mit sicherheit klarer als Perl und objektorientierter als C++.Leonidas hat geschrieben:Python hat eine klare Struktur und OOP auch wenn die Ruby Leute uns sagen wollen dass das nicht so ist *g*.
ich finde die tendenz von Python zu funktionen (damit meine ich alles, was keinen empfänger hat wie len) nicht sinnvoll...warum nicht "test".len()?
noch was: die zwingenden klammern bei funktionen verhindern schöne methodenreihen, wie sie in Ruby allgegenwärtig sind:(ähnlicher gedankengang wie bei unix-befehlen, nur OO.) wozu diese klammern?Code: Alles auswählen
input = DATA.read.split "----\n"
Code: Alles auswählen
input = DATA.read().split("\n")
Hier braucht man die Unterscheidung, ob der Rückgabewert der Funktion oder die Funktion selbst als Parameter gemeint ist.
Methoden sind bei Python eben auch nur Attribute einer Instanz. So kannst Du z.B. in Python mit
Code: Alles auswählen
if hasattr(foo, "write"):
...
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Dafür benehmen sich die Ruby Leute kindisch wenn wie probleme haben Python Code aus einer Seite zu kopieren, also mit null Einrückungen und null Lesbarkeit. Und das Indenting ist gar nicht so experimentell, das ist einfach mal anders, und ausserdem ist Python nicht die erste Sprache die sowas macht.murphy hat geschrieben:wie immer der erster und wichtigster punkt für alle Python-programmiererDookie hat geschrieben:1. das leidige end bei Blöckenich finde das ein wenig kindisch, weil es wichtigere dinge gibt als ein paar eingesparte end's. warum muss Python so was experimentelles haben?
Ok, schluss damit hier.murphy hat geschrieben:da ich meine bisherigen bedenken zu nichtredundanten indents (oder wie nennt ihr das?) nicht einfach kopieren will, link zum thread im Ruby-forum:
http://www.rubyforen.de/ptopic,2191.html#2191
kritik erwünschtaber ich glaube, wir sollten uns auf wichtigere kriterien konzentrieren.
In der Entwicklung von Python hat man warscheinlich gedacht, das viele Perl Ideen zu Perlartigem Code führen. Man hat eigentlich auch weniger auf Perl geschaut, sondern eine neue Sprache gemacht. Wenn man hätte Perl verbessern wollen, dann hätte man ja nicht eine neue Sprache gemacht sondern an Perl6 mitgemacht.murphy hat geschrieben:ja, Ruby kann fast wie Perl aussehen, wenn du magst. es kann auch (semantisch) wie Smalltalk aussehen. oder wie Haskell oder Delphi oder Python. das ist die freiheit von Ruby.
Matz (Erfinder von Ruby) mochte an Perl vor allem die möglichkeit, einfache dinge ganz kurz hinzuschreiben. Perl erkauft sich das mit z.T. grausligem zeichenwust, Ruby dämmt diesen wust ein und packt alles in eine solide OO-struktur: /Regexps/, $1, if-modifier können den code lesbarer machen, wenn man sie gut einsetzt. darum gibt es sie auch in Ruby. im unterschied zu Python wollte man bei Ruby ganz klar auch Perl-ideen weiterentwickeln.
Mich bringt inzwischen nichts freiwillig zu PHP.murphy hat geschrieben:PHP ist auch nicht ganz frei von allen Perl-kürzeln, aber dafür frei von gutem designleider muss ich trotzdem da drin programmieren!
Ja, genau das kann man seit neueren Python Versionen. Genau so werden auch New Style Klassen gemacht: durch vererben von Object. Man kann in Python inzwischen von jedem Typ erben. Warum fragst du um sinnvolle beispiele, wenn du dir einfach die sinnvollen Mixin Beispiele nehemen kannst?murphy hat geschrieben:das ist ein größeres thema. falls Dookie mit "von str ableiten" meint, dass das objekt fähigkeiten von einer anderen Klasse übernehmen soll: genau das tun mixins. ein paar infos hier:
http://www.approximity.com/rubybuch2/node72_main.html
http://www.rubygarden.org/faq/section/show/8
@Dookie: bitte poste mal ein beispiel für eine sinnvolle mehrfachvererbung.
murphy hat geschrieben:sind klassen objekte? was ist mit true, null oder 0? kann ich sie auch syntaktisch als objekte behandeln, also 0.abs() oder null.__str__() ? ich kenne Python leider nicht gut genug.
Code: Alles auswählen
>>>type(true)
<type 'bool'>
>>>class mybool(bool):
>>> pass
>>>
>>>type(null)
NameError: name 'null' is not defined
>>>type(0)
<type 'int'>
>>>class myint(int):
>>> pass
>>>
Code: Alles auswählen
>>>"abc".upper()
ABC

Gute Frage, warum nicht? Das haben sich auch die Python Entwickler gedacht, deswegen macht len() genau das:murphy hat geschrieben:ich finde die tendenz von Python zu funktionen (damit meine ich alles, was keinen empfänger hat wie len) nicht sinnvoll...warum nicht "test".len()?
Code: Alles auswählen
>>>len('abc')
3
>>>'abc'.__len__()
3
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ruby hat, wie Smalltalk, keine attribute. instanzvariablen sind nur innerhalb der klasse verfügbar und beginnen mit @. zugriffsmethoden gehen per attr_reader & friends. alles ist ein objekt, objekte haben nach außen nur methoden. vorteil: kapselung; nachteil: ein wenig mehr schreibarbeitMilan hat geschrieben:Es gibt in meinen Augen keinen Unterschied zwischen Methoden, Methodenaufrufen und Attributen.
ich verstehe bei deinem code gar nicht, zu was das x jetzt gehört. wann/wie oft wird x 1 zugewiesen? zu wem gehört x?
zu methoden ohne (): wie oft schreibt ihr () ohne inhalt? und wie oft braucht ihr die methoden selbst?
ich finde es gar nicht so schlimm, dass man in Ruby etwas mehr schreiben muss:
Code: Alles auswählen
foo.bar # methodenaufruf
foo.method(:bar) # methode
funktionale elemente (funktionen als parameter übergeben etc.) fallen in Ruby meist gar nicht auf, da vieles über codeblöcke läuft:
Code: Alles auswählen
[1, 2, 3].map { |x| x*x }
die redundanten klammern sind ganz grundlegend für Rubys syntax-logik. print zB ist ja auch nur eine methode...da hat ja auch Python keine klammern.
sehr seltsam. falls du mal schöneren code sehen willst, hier die appetithappen, die mich dazu gebracht haben, das buch zu kaufen und Ruby zu lernen:Dookie hat geschrieben:Aha, bei den Beispielen die ich zu Ruby fand, waren alle Methoden wie Foo.bar definiert
http://www.approximity.com/rubybuch2/node8.html
(hasattr? write ist ein attribut?)So kannst Du z.B. in Python mittesten ob foo eine write-Methode hat oder nicht.Code: Alles auswählen
if hasattr(foo, "write"): ...
in Ruby geht das natürlich auch:
Code: Alles auswählen
if foo.respond_to :write
...
lass mich raten: __hasattr__()?

module einzumischen und von klassen zu erben sind verschiedene dinge.Leonidas hat geschrieben:Man kann in Python inzwischen von jedem Typ erben. Warum fragst du um sinnvolle beispiele, wenn du dir einfach die sinnvollen Mixin Beispiele nehemen kannst?
geht auch int.methods() oder type(var) == int?Code: Alles auswählen
>>>type(true) <type 'bool'> >>>type(0) <type 'int'> >>>class myint(int):'
was benutzt man eigentlich in Python statt null oder nil? irgendein "nicht definiert" muss es doch geben...
meine frage bleibt: warum kein 'abc'.len()? wieso dieser seltsame umweg über __len__? das erweckt den eindruck, man würde mit einer definition von __len__ geheimnisvolle dinge tun, die Python unglaublicherweise ermöglicht. upper() ist doch auch eine echte methode (weil ja upper('abc') auf __upper__() umgeleitet wird.)Gute Frage, warum nicht? Das haben sich auch die Python Entwickler gedacht, deswegen macht len() genau das:Du siehst also das len() __len__() aufruft, das kannst du dann auch in deinen Klassen definieren und auch deine Klassen funktionieren dann mit len().Code: Alles auswählen
>>>len('abc') 3 >>>'abc'.__len__() 3
warum nicht auch len? ich will es ja nicht ändern, ich will bloß wissen, warum len() anders sein soll. die erfinder müssen sich doch was dabei gedacht haben.
von del fange ich lieber gar nicht erst an, das ist ja offenbar sogar ein keyword

-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Oft, weniger oft. Aber du willst einmal OO so pur wie möglich und dann ist dir () egal.murphy hat geschrieben:zu methoden ohne (): wie oft schreibt ihr () ohne inhalt? und wie oft braucht ihr die methoden selbst?
Ich sag ja das ich Mixins nicht verstehemurphy hat geschrieben:module einzumischen und von klassen zu erben sind verschiedene dinge.

Ja, seit Python 2.3 schon, vorher musste man halt type(0) oder type(int()) machen.murphy hat geschrieben:geht auch int.methods() oder type(var) == int?
Gibt es auch: None. Das wird inzwischen langsam zur einzigen Konstante von Python, denn beim Zuweisen von Werten an None gibt es SyntaxWarnings, die später sicher zu Errors werden.murphy hat geschrieben:was benutzt man eigentlich in Python statt null oder nil? irgendein "nicht definiert" muss es doch geben...
Hmm, ich nehme halt einfach das ist auch für irgendeinen internen Spass gedacht, da Python wirklich mit den __ Funktionen unglaubliche Dinge macht. Ich nahme mal an das irgendeine von diesen unglaublichen __ Funktionen auf __len__ zurückgreift, aber keine auf upper zugreift.murphy hat geschrieben:meine frage bleibt: warum kein 'abc'.len()? wieso dieser seltsame umweg über __len__? das erweckt den eindruck, man würde mit einer definition von __len__ geheimnisvolle dinge tun, die Python unglaublicherweise ermöglicht. upper() ist doch auch eine echte methode (weil ja upper('abc') auf __upper__() umgeleitet wird.)
warum nicht auch len? ich will es ja nicht ändern, ich will bloß wissen, warum len() anders sein soll. die erfinder müssen sich doch was dabei gedacht haben.
Ja, kannst es aber auch als Funktion verwenden. Genauso wie print ein Keyword zu sein scheint. In meiner irb kann ich ja auch print 'abc' aufrufen, ohne probleme. Und in ipython kann ich sogar len als Keyword verwendenmurphy hat geschrieben:von del fange ich lieber gar nicht erst an, das ist ja offenbar sogar ein keyword

My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Nö, ein __hasattr__ gibts nicht, wie und wo Attribute gesucht und gefunden werden hängt ab ob es sich um newstyle- oder oldstyle-Klassen handelt. Bei oldstyle stehen alle Attribute in __dict__. Bei newstyle stehen die Namen von Attributen in __slots__, die Methoden sind extra definiert und dann gibts noch Properties, damit lassen sich Pseudoattribute definieren die z.B. Zur Laufzeit berechnet werden, oder auch readonly-Attribute lassen sich mit Properties verwirklichen.
Daß len eine Funktion ist, hat bei Python historische gründe, in den ersten Pythonversionen war eben noch nicht alles Objektorientiert. len() gibt ja nicht nur die Länge von Strings sondern auch von Listen, Tuples, Dictionaries und sogar von xrange-Objekten zurück. Es gibt ja auch noch (aus historischen Gründen) das modul strings, das aber praktisch kaum noch gebraucht wird.
Ausser None gibts auch noch die Konstanten True und False, die auch die einzigen Instanzen von bool sind.
Gruß
Dookie
Daß len eine Funktion ist, hat bei Python historische gründe, in den ersten Pythonversionen war eben noch nicht alles Objektorientiert. len() gibt ja nicht nur die Länge von Strings sondern auch von Listen, Tuples, Dictionaries und sogar von xrange-Objekten zurück. Es gibt ja auch noch (aus historischen Gründen) das modul strings, das aber praktisch kaum noch gebraucht wird.
Ausser None gibts auch noch die Konstanten True und False, die auch die einzigen Instanzen von bool sind.
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
Naja, x ist nun hier ein Klassenattribut, also eine Attribut, auf das alle Instanzen denselben Zugriff haben und Identität vorherrscht (zumindest bei Newstyle Klassen). Ist bei Konstanten sinnvoll, bei mutable Objects ist es sinnvoller bei der Initialisierung ein self.x= ... zu schreiben.murphy hat geschrieben:Ruby hat, wie Smalltalk, keine attribute. instanzvariablen sind nur innerhalb der klasse verfügbar und beginnen mit @. zugriffsmethoden gehen per attr_reader & friends. alles ist ein objekt, objekte haben nach außen nur methoden. vorteil: kapselung; nachteil: ein wenig mehr schreibarbeitMilan hat geschrieben:Es gibt in meinen Augen keinen Unterschied zwischen Methoden, Methodenaufrufen und Attributen.
ich verstehe bei deinem code gar nicht, zu was das x jetzt gehört. wann/wie oft wird x 1 zugewiesen? zu wem gehört x?
Methoden selbst brauche ich nicht oft, aber Funktionen. Das fällt dir wahrscheinlich in ruby nicht so auf, da alles mehr auf OO hinausläuft. Außerdem ist es für mich persöhnlich lesbarer, wenn man Klammern schreibt, vor allem wenn die Funktionen/Methoden optionale Argumente oder Keywords haben. In Ruby kann man doch aber wenigstens trotzdem Klammern setzen, oder?zu methoden ohne (): wie oft schreibt ihr () ohne inhalt? und wie oft braucht ihr die methoden selbst?
ich finde es gar nicht so schlimm, dass man in Ruby etwas mehr schreiben muss:habe das noch nie gebraucht. musste erst in der doku nachschauen.Code: Alles auswählen
foo.bar # methodenaufruf foo.method(:bar) # methode
Das ist ein Spezialfall, ich sehe es mehr als statement (print !print zB ist ja auch nur eine methode...da hat ja auch Python keine klammern.


Was leistet int.methods? Wenn du eine Übersicht über alle Attribute haben willst rufst du dir(obj) und wenn du wissen willst obs Methoden sind rufst du callable(obj). Das hat hier wieder den Sinn, dass man auch Methoden als Attribute ansehen kann und grundsetzlich wieder als Argumente verwenden kann. Und ja, type(0)== int oder type(0) is int geht.geht auch int.methods() oder type(var) == int?Code: Alles auswählen
>>>type(true) <type 'bool'> >>>type(0) <type 'int'> >>>class myint(int):'
Nimm stattdessen None.was benutzt man eigentlich in Python statt null oder nil? irgendein "nicht definiert" muss es doch geben...
Naja, Objekte die eine Länge haben waren früher halt nur einige Builtin Typen. Wie das nun gekommen ist weiß ich nicht, aber vom Effekt her ist es mir egal wie ich es rufe. Es geht halt und da lege ich nicht direkt Wert darauf. Wer möchte kann ja wieder self.len=self.__len__ definierenmeine frage bleibt: warum kein 'abc'.len()? wieso dieser seltsame umweg über __len__? das erweckt den eindruck, man würde mit einer definition von __len__ geheimnisvolle dinge tun, die Python unglaublicherweise ermöglicht.Gute Frage, warum nicht? Das haben sich auch die Python Entwickler gedacht, deswegen macht len() genau das:Du siehst also das len() __len__() aufruft, das kannst du dann auch in deinen Klassen definieren und auch deine Klassen funktionieren dann mit len().Code: Alles auswählen
>>>len('abc') 3 >>>'abc'.__len__() 3


Richtig. Da macht es aber wirklich Sinn, denn del hat mehr als eine Bedeutung. Du kannst damit sowohl Referenzen auf Variablen vernichten als auch einzelne Elemente in Listen oder Dictionarys löschen.von del fange ich lieber gar nicht erst an, das ist ja offenbar sogar ein keyword
Ich bin gerade dabei die Diskussion im Rubyforum zu lesen. Hochinteressant, muss ich sagen. OO mäßig ist Ruby Python wohl an Eleganz etwas voraus, aber allein deswegen würde ich nicht unbedingt umsteigen. Dafür brauchts bei mir doch noch ein wenig mehr, denn ich programmiere eher funktional, modular und lege Wert auf Iteratoren wo ich kann. Wie sieht es damit in Ruby aus? Gibt es auch sowas wie yield? Sowas wie Generator Expressions?
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Naja, jedenfalls war's bei Ruby schon vor Python da. List Comprehension und Generator Expression (gibt's doch erst in 2.4, oder?) sind Dinge die ich in Ruby schmerzlich vermisse.
Gruß, mawe
Hihi! Klar gibt's bei Ruby yield. Das hat Python ja von Ruby geklautMilan hat geschrieben: Gibt es auch sowas wie yield? Sowas wie Generator Expressions?

Gruß, mawe