🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.python
19 messages
19 total messages Started by hubert depesz lubaczewski Tue, 15 Nov 2011 01:22
Pytania początkującego cz. 3
#28306
Author: hubert depesz lubaczewski
Date: Tue, 15 Nov 2011 01:22
37 lines
2508 bytes
1. najpierw pytanie praktyczne. parsuję maila przy pomocy klasy/modułu
email.
dostałem maila, wyciągam z niego przez mail.get() zawartość nagłówka.
ale nagłółek jest mime-encodowany.
znalazłem, że mogę go sobie przez email.header.decode_header()
zdekodować, ale dostaję z tego listę tupli, np. takich:
[('Re: Instalacja PostgreSQL / post\xeapy', 'iso-8859-2')]

jak mogę to zamienić na normalny string?
tych tupli może być więcej, ale w docach nic nie znalazłem więcej.

2. jak można się połapać w dokumentacji? to pytanie takie bardziej
ogólne, ale już tłumaczę.
znalazłem moduł email.
w docach do niego znalazłem informację o funkcji message_from_file
fajnie. ale nie jest napisane co ona zwraca (obiekt jakiejś klasy, ale
jakiej?). no nic. na sieci podpowiedzi, żeby zrobić print repr(obiekt)
ok. dowiedziałem się, że jest to instancja email.message.Message
fajnie.
odpaliłem pythona, zrobiłem import email (taki sam jak mam w swoim
programie), help( email.message.Message ) - i nie działa.
znowu - na sieci podpowiedzieli, że muszę zrobić: import email.message,
ale podobno nie jest regułą, że obcina się ostatni element z nazwy.

tu pytanie: czy jest jakieś miejsce/metoda/algorytm/cokolwiek dzięki
któremu mając "w ręku" obiekt mogę przeczytać do niego manuala - tzn. do
jego klasy, bez zgadywania co muszę zaimportować?

wiem, że powyższe brzmi marudnie, sorry, ale pytam całkiem serio - musi
być przecież jakaś metoda by znaleźć odpowiednie doce, tylko ja jej nie
widzę/nie znam.

depesz

-- 
The best thing about modern society is how easy it is to avoid contact with it.
                                                             http://depesz.com/
Re: Pytania początkującego cz. 3
#28307
Author: Mariusz Kruk
Date: Tue, 15 Nov 2011 07:44
66 lines
3379 bytes
epsilon$ while read LINE; do echo \>"$LINE"; done < "hubert depesz lubaczewski"
>1. najpierw pytanie praktyczne. parsuję maila przy pomocy klasy/modułu
>email.
>dostałem maila, wyciągam z niego przez mail.get() zawartość nagłówka.
>ale nagłółek jest mime-encodowany.
>znalazłem, że mogę go sobie przez email.header.decode_header()
>zdekodować, ale dostaję z tego listę tupli, np. takich:
>[('Re: Instalacja PostgreSQL / post\xeapy', 'iso-8859-2')]
>
>jak mogę to zamienić na normalny string?

email.charset.Charset.header_encode?

>2. jak można się połapać w dokumentacji? to pytanie takie bardziej
>ogólne, ale już tłumaczę.
>znalazłem moduł email.
>w docach do niego znalazłem informację o funkcji message_from_file
>fajnie. ale nie jest napisane co ona zwraca (obiekt jakiejś klasy, ale
>jakiej?). no nic. na sieci podpowiedzi, żeby zrobić print repr(obiekt)
>ok. dowiedziałem się, że jest to instancja email.message.Message
>fajnie.
>
>odpaliłem pythona, zrobiłem import email (taki sam jak mam w swoim
>programie), help( email.message.Message ) - i nie działa.
>znowu - na sieci podpowiedzieli, że muszę zrobić: import email.message,
>ale podobno nie jest regułą, że obcina się ostatni element z nazwy.
>
>tu pytanie: czy jest jakieś miejsce/metoda/algorytm/cokolwiek dzięki
>któremu mając "w ręku" obiekt mogę przeczytać do niego manuala - tzn. do
>jego klasy, bez zgadywania co muszę zaimportować?

#v+
$ ipython
Python 2.6.7 (r267:88850, Aug  3 2011, 15:19:01) 
Type "copyright", "credits" or "license" for more information.

IPython 0.10.2 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object'. ?object also works, ?? prints more.

In [1]: import email

In [2]: email.message_from_file?
Type:           function
Base Class:     <type 'function'>
String Form:    <function message_from_file at 0x912d8b4>
Namespace:      Interactive
File:           /usr/lib/python2.6/email/__init__.py
Definition:     email.message_from_file(fp, *args, **kws)
Docstring:
    Read a file and parse its contents into a Message object model.                                                                                                                     
    
    Optional _class and strict are passed to the Parser constructor.

#v-

O to chodzi?


-- 
\------------------------/
|  Kruk@epsilon.eu.org   |
| http://epsilon.eu.org/ |
/------------------------\
Re: Pytania początkującego cz. 3
#28319
Author: Artur M. Piwko
Date: Tue, 15 Nov 2011 08:03
50 lines
2905 bytes
In the darkest hour on Tue, 15 Nov 2011 02:22:49 +0100,
hubert depesz lubaczewski <depesz@depesz.com> screamed:
> 1. najpierw pytanie praktyczne. parsuję maila przy pomocy klasy/modułu
> email.
> dostałem maila, wyciągam z niego przez mail.get() zawartość nagłówka.
> ale nagłółek jest mime-encodowany.
> znalazłem, że mogę go sobie przez email.header.decode_header()
> zdekodować, ale dostaję z tego listę tupli, np. takich:
> [('Re: Instalacja PostgreSQL / post\xeapy', 'iso-8859-2')]
>
> jak mogę to zamienić na normalny string?
> tych tupli może być więcej, ale w docach nic nie znalazłem więcej.
>

headers = [('Re: Instalacja PostgreSQL / post\xeapy', 'iso-8859-2')]

for hdr, enc in headers:
    header = hdr.decode(enc)
    # I tu masz to w Unikodzie.

> 2. jak można się połapać w dokumentacji? to pytanie takie bardziej
> ogólne, ale już tłumaczę.
> znalazłem moduł email.
> w docach do niego znalazłem informację o funkcji message_from_file
> fajnie. ale nie jest napisane co ona zwraca (obiekt jakiejś klasy, ale
> jakiej?). no nic. na sieci podpowiedzi, żeby zrobić print repr(obiekt)
> ok. dowiedziałem się, że jest to instancja email.message.Message
> fajnie.
> odpaliłem pythona, zrobiłem import email (taki sam jak mam w swoim
> programie), help( email.message.Message ) - i nie działa.
> znowu - na sieci podpowiedzieli, że muszę zrobić: import email.message,
> ale podobno nie jest regułą, że obcina się ostatni element z nazwy.
>
> tu pytanie: czy jest jakieś miejsce/metoda/algorytm/cokolwiek dzięki
> któremu mając "w ręku" obiekt mogę przeczytać do niego manuala - tzn. do
> jego klasy, bez zgadywania co muszę zaimportować?
>

Np. via ipython

# import email.message
# dir(email.message.Message)
# email.message.Message?
# email.message.Message??

-- 
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:222B ]
[ 08:58:30 user up 12987 days, 20:53,  1 user, load average: 0.09, 0.04, 0.35 ]

                  Faith:  not *wanting* to know what is true.
Re: Pytania początkującego cz. 3
#28308
Author: hubert depesz lubaczewski
Date: Tue, 15 Nov 2011 14:07
53 lines
2890 bytes
On 2011-11-15, Mariusz Kruk <Mariusz.Kruk@epsilon.eu.org> wrote:
> email.charset.Charset.header_encode?

nie sprawdzałem teraz, ale nazwa *encode* sugeruje dosyć mocno, że nie.

>>tu pytanie: czy jest jakieś miejsce/metoda/algorytm/cokolwiek dzięki
>>któremu mając "w ręku" obiekt mogę przeczytać do niego manuala - tzn. do
>>jego klasy, bez zgadywania co muszę zaimportować?
>
> #v+
> $ ipython
> Python 2.6.7 (r267:88850, Aug  3 2011, 15:19:01) 
> Type "copyright", "credits" or "license" for more information.
>
> IPython 0.10.2 -- An enhanced Interactive Python.
> ?         -> Introduction and overview of IPython's features.
> %quickref -> Quick reference.
> help      -> Python's own help system.
> object?   -> Details about 'object'. ?object also works, ?? prints more.
>
> In [1]: import email
>
> In [2]: email.message_from_file?
> Type:           function
> Base Class:     <type 'function'>
> String Form:    <function message_from_file at 0x912d8b4>
> Namespace:      Interactive
> File:           /usr/lib/python2.6/email/__init__.py
> Definition:     email.message_from_file(fp, *args, **kws)
> Docstring:
>     Read a file and parse its contents into a Message object model.                                                                                                                     
>     
>     Optional _class and strict are passed to the Parser constructor.
>
> #v-
>
> O to chodzi?

ok. a jak teraz dostać dokumentację do tego "Message"? to jest
problemem, nie samo message_from_file, tylko dokumentacja do tego co ta
funkcja zwraca - czyli klasy "Message".

aby było jasne - ja tę dokumentację znalazłem (a dokładniej to na
#python na ircu mi pokazali), ale chodzi mi o algorytm jak z powyższego
się domyślić, że muszę:
1. import email.message
2. help( email.message.Message )

depesz

-- 
The best thing about modern society is how easy it is to avoid contact with it.
                                                             http://depesz.com/
Re: Pytania początkującego cz. 3
#28320
Author: hubert depesz lubaczewski
Date: Tue, 15 Nov 2011 14:09
38 lines
2419 bytes
On 2011-11-15, Artur M. Piwko <milusi.pysiaczek@buziaczek.pl> wrote:
>> 2. jak można się połapać w dokumentacji? to pytanie takie bardziej
>> ogólne, ale już tłumaczę.
>> znalazłem moduł email.
>> w docach do niego znalazłem informację o funkcji message_from_file
>> fajnie. ale nie jest napisane co ona zwraca (obiekt jakiejś klasy, ale
>> jakiej?). no nic. na sieci podpowiedzi, żeby zrobić print repr(obiekt)
>> ok. dowiedziałem się, że jest to instancja email.message.Message
>> fajnie.
>> odpaliłem pythona, zrobiłem import email (taki sam jak mam w swoim
>> programie), help( email.message.Message ) - i nie działa.
>> znowu - na sieci podpowiedzieli, że muszę zrobić: import email.message,
>> ale podobno nie jest regułą, że obcina się ostatni element z nazwy.
>>
>> tu pytanie: czy jest jakieś miejsce/metoda/algorytm/cokolwiek dzięki
>> któremu mając "w ręku" obiekt mogę przeczytać do niego manuala - tzn. do
>> jego klasy, bez zgadywania co muszę zaimportować?
>>
>
> Np. via ipython
>
> # import email.message
> # dir(email.message.Message)
> # email.message.Message?
> # email.message.Message??

ok. ale skąd wiadomo, że muszę zrobić ten import?
tzn. konkretnie ten, email.message.

i czy jak klasa będzie się nazywała a.b.c.d.e.f
to muszę zrobić zawsze import a.b.c.d.e (czyli nazwa klasy bez
ostatniego elementu)?

depesz

-- 
The best thing about modern society is how easy it is to avoid contact with it.
                                                             http://depesz.com/
Re: Pytania początkującego cz. 3
#28309
Author: Mariusz Kruk
Date: Tue, 15 Nov 2011 14:34
20 lines
1623 bytes
epsilon$ while read LINE; do echo \>"$LINE"; done < "hubert depesz lubaczewski"
>ok. a jak teraz dostać dokumentację do tego "Message"? to jest
>problemem, nie samo message_from_file, tylko dokumentacja do tego co ta
>funkcja zwraca - czyli klasy "Message".
>
>aby było jasne - ja tę dokumentację znalazłem (a dokładniej to na
>#python na ircu mi pokazali), ale chodzi mi o algorytm jak z powyższego
>się domyślić, że muszę:
>1. import email.message
>2. help( email.message.Message )

W ipythonie - najpierw import email.message, potem email.message<Tab> i
ewentualnie pytanie przez ? o konkretne składowe.
Albo ja nie rozumiem pytania.

-- 
\------------------------/
|  Kruk@epsilon.eu.org   |
| http://epsilon.eu.org/ |
/------------------------\
Re: Pytania początkującego cz. 3
#28310
Author: hubert depesz lubaczewski
Date: Tue, 15 Nov 2011 14:52
31 lines
2120 bytes
On 2011-11-15, Mariusz Kruk <Mariusz.Kruk@epsilon.eu.org> wrote:
> epsilon$ while read LINE; do echo \>"$LINE"; done < "hubert depesz lubaczewski"
>>ok. a jak teraz dostać dokumentację do tego "Message"? to jest
>>problemem, nie samo message_from_file, tylko dokumentacja do tego co ta
>>funkcja zwraca - czyli klasy "Message".
>>
>>aby było jasne - ja tę dokumentację znalazłem (a dokładniej to na
>>#python na ircu mi pokazali), ale chodzi mi o algorytm jak z powyższego
>>się domyślić, że muszę:
>>1. import email.message
>>2. help( email.message.Message )
>
> W ipythonie - najpierw import email.message, potem email.message<Tab> i
> ewentualnie pytanie przez ? o konkretne składowe.
> Albo ja nie rozumiem pytania.

ok. dane wejściowe:
1.  mamy klasę "email".
2. w dokumentacji jest mowa o klasie "Message" (z dużej litery).

skąd mam wiedzieć, że:

1. "Message" to tak naprawdę "email.message.Message"
2. aby dostać doca do "email.message.Message" muszę zaimportować
email.message ?

depesz

-- 
The best thing about modern society is how easy it is to avoid contact with it.
                                                             http://depesz.com/
Re: Pytania początkującego cz. 3
#28324
Author: khonsu
Date: Tue, 15 Nov 2011 18:01
79 lines
4142 bytes
On Tue, 15 Nov 2011 02:22:49 +0100, hubert depesz lubaczewski  
<depesz@depesz.com> wrote:

> 1. najpierw pytanie praktyczne. parsuję maila przy pomocy klasy/modułu
> email.
> dostałem maila, wyciągam z niego przez mail.get() zawartość nagłówka.
> ale nagłółek jest mime-encodowany.
> znalazłem, że mogę go sobie przez email.header.decode_header()
> zdekodować, ale dostaję z tego listę tupli, np. takich:
> [('Re: Instalacja PostgreSQL / post\xeapy', 'iso-8859-2')]
>
> jak mogę to zamienić na normalny string?
> tych tupli może być więcej, ale w docach nic nie znalazłem więcej.
>
> 2. jak można się połapać w dokumentacji? to pytanie takie bardziej
> ogólne, ale już tłumaczę.
> znalazłem moduł email.
> w docach do niego znalazłem informację o funkcji message_from_file
> fajnie. ale nie jest napisane co ona zwraca (obiekt jakiejś klasy, ale
> jakiej?). no nic. na sieci podpowiedzi, żeby zrobić print repr(obiekt)
> ok. dowiedziałem się, że jest to instancja email.message.Message
> fajnie.
> odpaliłem pythona, zrobiłem import email (taki sam jak mam w swoim
> programie), help( email.message.Message ) - i nie działa.
> znowu - na sieci podpowiedzieli, że muszę zrobić: import email.message,
> ale podobno nie jest regułą, że obcina się ostatni element z nazwy.
>
> tu pytanie: czy jest jakieś miejsce/metoda/algorytm/cokolwiek dzięki
> któremu mając "w ręku" obiekt mogę przeczytać do niego manuala - tzn. do
> jego klasy, bez zgadywania co muszę zaimportować?
>
> wiem, że powyższe brzmi marudnie, sorry, ale pytam całkiem serio - musi
> być przecież jakaś metoda by znaleźć odpowiednie doce, tylko ja jej nie
> widzę/nie znam.
>
> depesz
>


"email" to pakiet (package), natomiast: email.charset, email.encoders  
,email.errors, email.generator, email.header, email.iterators,  
email.message, email.mime, email.parser, email.utils, to konkretne  
moduły/submoduły.

Pierwszy człon to nazwa pakietu, drugi to konkretny muduł/submoduł w tym  
pakiecie email.message.Message to już konkretny obiekt tego modułu, w tym  
przypadku klasa.

Żebyś mógł odwoływać się do tego konkretnego obiektu (Message), musisz do  
lokalnej przestrzeni nazw zaimportować ten konkretny moduł w którym dany  
obiekt się znajduje.

Robiąc tak: "import email.message" importujesz ten moduł, możesz więc  
teraz dowolnie odwoływać się do jego obiektów za pomocą prefiksu będącego  
nazwą modułu, czyli za pomocą "email.message".

Jeśli tego modułu wcześniej nie zaimportujesz to python nie będzie  
wiedział o jaki obiekt ci chodzi i zgłosi "NameError", np:

>>> help(email.message.Message)
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
NameError: name 'email' is not defined

czego należało się spodziewać, jako że zmiennej o takiej nazwie nie ma, w  
tej konkretnej przestrzeni nazw.

możesz też oszczędzić sobie walenia w klawiaturę i importować konkretny  
obiekt tak:

>>> from email.message import Message
>>>help(Message)

co oszczędzi ci konieczności poprzedzania klasy Message nazwą podułu.


Pozdrawiam khonsu.

--- Posted via news://freenews.netfront.net/ - Complaints to news@netfront.net ---
Re: Pytania początkującego cz. 3
#28311
Author: Mariusz Kruk
Date: Tue, 15 Nov 2011 19:29
38 lines
2342 bytes
epsilon$ while read LINE; do echo \>"$LINE"; done < "hubert depesz lubaczewski"
>>>ok. a jak teraz dostać dokumentację do tego "Message"? to jest
>>>problemem, nie samo message_from_file, tylko dokumentacja do tego co ta
>>>funkcja zwraca - czyli klasy "Message".
>>>
>>>aby było jasne - ja tę dokumentację znalazłem (a dokładniej to na
>>>#python na ircu mi pokazali), ale chodzi mi o algorytm jak z powyższego
>>>się domyślić, że muszę:
>>>1. import email.message
>>>2. help( email.message.Message )
>>
>> W ipythonie - najpierw import email.message, potem email.message<Tab> i
>> ewentualnie pytanie przez ? o konkretne składowe.
>> Albo ja nie rozumiem pytania.
>
>ok. dane wejściowe:
>1.  mamy klasę "email".
>2. w dokumentacji jest mowa o klasie "Message" (z dużej litery).
>
>skąd mam wiedzieć, że:
>
>1. "Message" to tak naprawdę "email.message.Message"

Szczerze mówiąc, nie przypominam sobie, żebym się spotkał z odwołaniem
do zupełnie innego pakietu (pomijając oczywiście obiekty standardowe).
Ale jeśli, w takim wypadku spodziewałbym się odwołania do pełnej ścieżki
właśnie.

>2. aby dostać doca do "email.message.Message" muszę zaimportować
>email.message ?

No, z jakiegoś pakietu ta klasa się wzięła, nieprawdaż? :-)

-- 
\------------------------/
|  Kruk@epsilon.eu.org   |
| http://epsilon.eu.org/ |
/------------------------\
Re: Pytania początkującego cz. 3
#28312
Author: hubert depesz lubaczewski
Date: Tue, 15 Nov 2011 19:45
37 lines
2272 bytes
On 2011-11-15, Mariusz Kruk <Mariusz.Kruk@epsilon.eu.org> wrote:
>>ok. dane wejściowe:
>>1.  mamy klasę "email".
>>2. w dokumentacji jest mowa o klasie "Message" (z dużej litery).
>>
>>skąd mam wiedzieć, że:
>>
>>1. "Message" to tak naprawdę "email.message.Message"
>
> Szczerze mówiąc, nie przypominam sobie, żebym się spotkał z odwołaniem
> do zupełnie innego pakietu (pomijając oczywiście obiekty standardowe).
> Ale jeśli, w takim wypadku spodziewałbym się odwołania do pełnej ścieżki
> właśnie.

tak, ale skąd mam wiedzieć, że to jest email.message.Message, a nie np.
email.msg.Message, albo email.Message.Message, albo
email.foobar.Message?

>>2. aby dostać doca do "email.message.Message" muszę zaimportować
>>email.message ?
> No, z jakiegoś pakietu ta klasa się wzięła, nieprawdaż? :-)

ok. czy zawsze mając pełną nazwę klasy, to co muszę importować biorę z
nazwy klasy, bez ostatniego elementu?

tzn. gdybym miał klasę:
world.europe.poland.warsaw.depesz.python
to do importowania na 100% byłby
world.europe.poland.warsaw.depesz

?

depesz

-- 
The best thing about modern society is how easy it is to avoid contact with it.
                                                             http://depesz.com/
Re: Pytania początkującego cz. 3
#28313
Author: khonsu
Date: Tue, 15 Nov 2011 20:27
63 lines
3459 bytes
On Tue, 15 Nov 2011 20:45:55 +0100, hubert depesz lubaczewski  
<depesz@depesz.com> wrote:

> On 2011-11-15, Mariusz Kruk <Mariusz.Kruk@epsilon.eu.org> wrote:
>>> ok. dane wejściowe:
>>> 1.  mamy klasę "email".
>>> 2. w dokumentacji jest mowa o klasie "Message" (z dużej litery).
>>>
>>> skąd mam wiedzieć, że:
>>>
>>> 1. "Message" to tak naprawdę "email.message.Message"
>>
>> Szczerze mówiąc, nie przypominam sobie, żebym się spotkał z odwołaniem
>> do zupełnie innego pakietu (pomijając oczywiście obiekty standardowe).
>> Ale jeśli, w takim wypadku spodziewałbym się odwołania do pełnej ścieżki
>> właśnie.
>
> tak, ale skąd mam wiedzieć, że to jest email.message.Message, a nie np.
> email.msg.Message, albo email.Message.Message, albo
> email.foobar.Message?
>
>>> 2. aby dostać doca do "email.message.Message" muszę zaimportować
>>> email.message ?
>> No, z jakiegoś pakietu ta klasa się wzięła, nieprawdaż? :-)
>
> ok. czy zawsze mając pełną nazwę klasy, to co muszę importować biorę z
> nazwy klasy, bez ostatniego elementu?
>
> tzn. gdybym miał klasę:
> world.europe.poland.warsaw.depesz.python
> to do importowania na 100% byłby
> world.europe.poland.warsaw.depesz
>
> ?
>
> depesz
>


Operator "kropkowy" to odwołanie do atrybutu obiektu (pola, metody, etc.).  
To jest zależne od tego co chcesz uzyskać, jeśli chcesz mieć klasę z  
jakiejś biblioteki, to oczywiste że musisz tę bibliotekę zaimportować.  
Odwoływanie się do obiektów w modułach wygląda tak samo jak dostęp do  
atrybutów innych obiektów, w pythonie wszystko jest obiektem.

Tak więc:
                email.message.Message
                  ^       ^      ^
pakiet email  ---+       |      +--- Twój obiekt (klasa Message)
                    moduł message


Jeśli world to moduł to europe.poland.warsaw.depesz, będzie jakimś  
obiektem tego modułu, i wystarczy że zaimportujesz tylko world.
Jeśli world to pakiet a europe to submoduł, to żeby dostać się do  
poland.warsaw.depesz musisz zaimportować world.europe.
Jeśli email to obiekt w twojej przestrzeni nazw, to nic nie musisz  
importować.

W ogóle wydaje mi się że nie rozumiesz, struktury biblioteki standardowej  
pythona, wszystko co nie jest "core python" musisz sobie zaimportować.

--- Posted via news://freenews.netfront.net/ - Complaints to news@netfront.net ---
Re: Pytania początkującego cz. 3
#28314
Author: hubert depesz lubaczewski
Date: Tue, 15 Nov 2011 20:40
29 lines
2329 bytes
On 2011-11-15, khonsu <fkhonsu@gmail.com> wrote:
> Operator "kropkowy" to odwołanie do atrybutu obiektu (pola, metody, etc.).  
> To jest zależne od tego co chcesz uzyskać, jeśli chcesz mieć klasę z  
> jakiejś biblioteki, to oczywiste że musisz tę bibliotekę zaimportować.  
> Odwoływanie się do obiektów w modułach wygląda tak samo jak dostęp do  
> atrybutów innych obiektów, w pythonie wszystko jest obiektem.
>
> Tak więc:
>                 email.message.Message
>                   ^       ^      ^
> pakiet email  ---+       |      +--- Twój obiekt (klasa Message)
>                     moduł message
>
>
> Jeśli world to moduł to europe.poland.warsaw.depesz, będzie jakimś  
> obiektem tego modułu, i wystarczy że zaimportujesz tylko world.
> Jeśli world to pakiet a europe to submoduł, to żeby dostać się do  
> poland.warsaw.depesz musisz zaimportować world.europe.
> Jeśli email to obiekt w twojej przestrzeni nazw, to nic nie musisz  
> importować.

aaaargh. a skąd mam wiedzieć czy "world" to moduł, czy pakiet, czy
jeszcze coś innego?

depesz

-- 
The best thing about modern society is how easy it is to avoid contact with it.
                                                             http://depesz.com/
Re: Pytania początkującego cz. 3
#28318
Author: Grzegorz Staniak
Date: Tue, 15 Nov 2011 20:52
64 lines
3725 bytes
On 15.11.2011, hubert depesz lubaczewski <depesz@depesz.com> wroted:

>>>ok. dane wejściowe:
>>>1.  mamy klasę "email".
>>>2. w dokumentacji jest mowa o klasie "Message" (z dużej litery).
>>>
>>>skąd mam wiedzieć, że:
>>>
>>>1. "Message" to tak naprawdę "email.message.Message"
>>
>> Szczerze mówiąc, nie przypominam sobie, żebym się spotkał z odwołaniem
>> do zupełnie innego pakietu (pomijając oczywiście obiekty standardowe).
>> Ale jeśli, w takim wypadku spodziewałbym się odwołania do pełnej ścieżki
>> właśnie.
>
> tak, ale skąd mam wiedzieć, że to jest email.message.Message, a nie np.
> email.msg.Message, albo email.Message.Message, albo
> email.foobar.Message?

 [~]$ python
 >>> import email
 >>> help(email)
     [...]
 >>> dir(email)
 ['Charset', 'Encoders', 'Errors', 'FeedParser', 'Generator',
 'Header', 'Iterators', 'LazyImporter', 'MIMEAudio', 'MIMEBase',
 'MIMEImage', 'MIMEMessage', 'MIMEMultipart', 'MIMENonMultipart',
 'MIMEText', 'Message', 'Parser', 'Utils', '_LOWERNAMES',
 '_MIMENAMES', '__all__', '__builtins__', '__doc__', '__file__',
 '__name__', '__package__', '__path__', '__version__', '_name',
 '_parseaddr', 'base64MIME', 'base64mime', 'charset', 'email',
 'encoders', 'errors', 'feedparser', 'generator', 'header',
 'importer', 'iterators', 'message', 'message_from_file',
 'message_from_string', 'mime', 'parser', 'quopriMIME', 'quoprimime',
 'sys', 'utils']
 >>> help(email.message)
     [...]
 >>> dir(email.message)
 ['Message', 'SEMISPACE', 'StringIO', '__all__', '__builtins__',
 '__doc__', '__file__', '__name__', '__package__', '_formatparam',
 '_parseparam', '_splitparam', '_unquotevalue', 'binascii', 'email',
 'errors', 're', 'tspecials', 'utils', 'uu', 'warnings']
 >>> dir(email.message.Message)
 ['__contains__', '__delitem__', '__doc__', '__getitem__',
 '__init__', '__len__', '__module__', '__setitem__', '__str__',
 _get_params_preserve', 'add_header', 'as_string', 'attach',
 del_param', 'get', 'get_all', 'get_boundary', 'get_charset',
 get_charsets', 'get_content_charset', 'get_content_maintype',
 get_content_subtype', 'get_content_type', 'get_default_type',
 get_filename', 'get_param', 'get_params', 'get_payload',
 get_unixfrom', 'has_key', 'is_multipart', 'items', 'keys',
 replace_header', 'set_boundary', 'set_charset', 'set_default_type',
 set_param', 'set_payload', 'set_type', 'set_unixfrom', 'values',
 walk']
 >>> help(email.message.Message)

itd.

dir() robi inspekcję i melduje co jest w środku, wybierasz i wołasz 
help() i tak w głąb.

GS
-- 
Grzegorz Staniak   <gstaniak _at_ gmail [dot] com>
Re: Pytania początkującego cz. 3
#28315
Author: Piotr Chamera
Date: Wed, 16 Nov 2011 09:32
78 lines
3255 bytes
W dniu 2011-11-15 21:40, hubert depesz lubaczewski pisze:
> On 2011-11-15, khonsu<fkhonsu@gmail.com>  wrote:
>> Operator "kropkowy" to odwołanie do atrybutu obiektu (pola, metody, etc.).
>> To jest zależne od tego co chcesz uzyskać, jeśli chcesz mieć klasę z
>> jakiejś biblioteki, to oczywiste że musisz tę bibliotekę zaimportować.
>> Odwoływanie się do obiektów w modułach wygląda tak samo jak dostęp do
>> atrybutów innych obiektów, w pythonie wszystko jest obiektem.
>>
>> Tak więc:
>>                  email.message.Message
>>                    ^       ^      ^
>> pakiet email  ---+       |      +--- Twój obiekt (klasa Message)
>>                      moduł message
>>
>>
>> Jeśli world to moduł to europe.poland.warsaw.depesz, będzie jakimś
>> obiektem tego modułu, i wystarczy że zaimportujesz tylko world.
>> Jeśli world to pakiet a europe to submoduł, to żeby dostać się do
>> poland.warsaw.depesz musisz zaimportować world.europe.
>> Jeśli email to obiekt w twojej przestrzeni nazw, to nic nie musisz
>> importować.
>
> aaaargh. a skąd mam wiedzieć czy "world" to moduł, czy pakiet, czy
> jeszcze coś innego?

Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit 
(Intel)] on win32

 >>> import email
 >>> help(email)
Help on package email:

NAME
     email - A package for parsing, handling, and generating email messages.

FILE
     c:\programy\python2.5\lib\email\__init__.py

PACKAGE CONTENTS
     _parseaddr
     base64mime
     charset
     encoders
     errors
     feedparser
     generator
     header
     iterators
     message
     mime (package)
     parser
     quoprimime
     test (package)
     utils

(...)

 >>> help(email.message)
Help on module email.message in email:

NAME
     email.message - Basic message object for the email package object 
model.

FILE
     c:\programy\python2.5\lib\email\message.py

CLASSES
     Message

(...)

 >>> help(email.message.Message)
Help on class Message in module email.message:

class Message
  |  Basic message object.
(...)
Re: Pytania początkującego cz. 3
#28316
Author: Piotr Chamera
Date: Wed, 16 Nov 2011 09:38
41 lines
2645 bytes
W dniu 2011-11-16 10:32, Piotr Chamera pisze:
> W dniu 2011-11-15 21:40, hubert depesz lubaczewski pisze:
>> On 2011-11-15, khonsu<fkhonsu@gmail.com> wrote:
>>> Operator "kropkowy" to odwołanie do atrybutu obiektu (pola, metody,
>>> etc.).
>>> To jest zależne od tego co chcesz uzyskać, jeśli chcesz mieć klasę z
>>> jakiejś biblioteki, to oczywiste że musisz tę bibliotekę zaimportować.
>>> Odwoływanie się do obiektów w modułach wygląda tak samo jak dostęp do
>>> atrybutów innych obiektów, w pythonie wszystko jest obiektem.
>>>
>>> Tak więc:
>>> email.message.Message
>>> ^ ^ ^
>>> pakiet email ---+ | +--- Twój obiekt (klasa Message)
>>> moduł message
>>>
>>>
>>> Jeśli world to moduł to europe.poland.warsaw.depesz, będzie jakimś
>>> obiektem tego modułu, i wystarczy że zaimportujesz tylko world.
>>> Jeśli world to pakiet a europe to submoduł, to żeby dostać się do
>>> poland.warsaw.depesz musisz zaimportować world.europe.
>>> Jeśli email to obiekt w twojej przestrzeni nazw, to nic nie musisz
>>> importować.
>>
>> aaaargh. a skąd mam wiedzieć czy "world" to moduł, czy pakiet, czy
>> jeszcze coś innego?
>
> Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit
> (Intel)] on win32
>
>  >>> import email
(...)
albo tak (jeżeli potrzebujesz tylko typ obiektu):
 >>> type(email.message.Message)
<type 'classobj'>

 >>> type(email.message)
<type 'module'>

 >>> type(email)
<type 'module'>
Re: Pytania początkującego cz. 3
#28317
Author: hubert depesz lubaczewski
Date: Wed, 16 Nov 2011 11:06
18 lines
1627 bytes
On 2011-11-16, Piotr Chamera <piotr_chamera@poczta.onet.pl> wrote:
> albo tak (jeżeli potrzebujesz tylko typ obiektu):
> >>> type(email.message.Message)
><type 'classobj'>
>
> >>> type(email.message)
><type 'module'>
>
> >>> type(email)
><type 'module'>

dzięki (i za ten, i za drugi post). chyba wszystko jasne.

depesz

-- 
The best thing about modern society is how easy it is to avoid contact with it.
                                                             http://depesz.com/
Re: Pytania początkującego cz. 3
#28321
Author: Artur M. Piwko
Date: Thu, 17 Nov 2011 07:27
23 lines
1700 bytes
In the darkest hour on Tue, 15 Nov 2011 15:09:02 +0100,
hubert depesz lubaczewski <depesz@depesz.com> screamed:
>> # import email.message
>> # dir(email.message.Message)
>> # email.message.Message?
>> # email.message.Message??
>
> ok. ale skąd wiadomo, że muszę zrobić ten import?
> tzn. konkretnie ten, email.message.
>
> i czy jak klasa będzie się nazywała a.b.c.d.e.f
> to muszę zrobić zawsze import a.b.c.d.e (czyli nazwa klasy bez
> ostatniego elementu)?
>

A skąd wiesz jakiego use (czy jak tam się to nazywa) w perlu użyć?
Np. http://docs.python.org/modindex.html

-- 
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:218B ]
[ 08:26:54 user up 12989 days, 20:21,  1 user, load average: 0.00, 0.18, 0.19 ]

                       Portable:  Survives system reboot.
Re: Pytania początkującego cz. 3
#28322
Author: hubert depesz lubaczewski
Date: Thu, 17 Nov 2011 11:57
20 lines
1742 bytes
On 2011-11-17, Artur M. Piwko <milusi.pysiaczek@buziaczek.pl> wrote:
> A skąd wiesz jakiego use (czy jak tam się to nazywa) w perlu użyć?
> Np. http://docs.python.org/modindex.html

ale w perlu doce mam dostępne od razu z shella perldocem.

i nie mam technicznie potrzeby ładowania klas które odpowiadają obiektom
zrobionym przez inne klasy.

tzn. jak mam klasę HTML::TreeBuilder która zwraca HTML::Element, to aby
przeczytać doce do HTML::Element po prostu robię perldoc HTML::Element.

Tu tak nie było, bo klasa "email" zwróciła obiekt klasy "Message", a
pełna nazwa klasy była potrzebna by help() w pythonie zadziałał.

depesz

-- 
The best thing about modern society is how easy it is to avoid contact with it.
                                                             http://depesz.com/
Re: Pytania początkującego cz. 3
#28323
Author: Adam Przybyla
Date: Thu, 17 Nov 2011 12:15
18 lines
1870 bytes
hubert depesz lubaczewski <depesz@depesz.com> wrote:
> On 2011-11-17, Artur M. Piwko <milusi.pysiaczek@buziaczek.pl> wrote:
>> A skąd wiesz jakiego use (czy jak tam się to nazywa) w perlu użyć?
>> Np. http://docs.python.org/modindex.html
> 
> ale w perlu doce mam dostępne od razu z shella perldocem.
> 
> i nie mam technicznie potrzeby ładowania klas które odpowiadają obiektom
> zrobionym przez inne klasy.
> 
> tzn. jak mam klasę HTML::TreeBuilder która zwraca HTML::Element, to aby
> przeczytać doce do HTML::Element po prostu robię perldoc HTML::Element.
> 
> Tu tak nie było, bo klasa "email" zwróciła obiekt klasy "Message", a
> pełna nazwa klasy była potrzebna by help() w pythonie zadziałał.
	... tu nie ma pojedynczego repozytorium pakietow, dlatego nie ma 
od razu pelnej dokumentacji. Sorry. Cos za cos. Z powazaniem
								Adam Przybyla
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads