2012-04-06 10 views
22

Kiedy tworzę moduł z własnego utworu:class Classname (object), jaki rodzaj słowa to "object" w Pythonie?

class Classname(randomobject): 
    pass 

I próbuję uruchomić plik .py modułu interpreter mówi, że randomobject nie jest zdefiniowana.

Ale kiedy zrobić:

class Classname(object): 
    pass 

Moduł działa dobrze. Więc jeśli object nie jest słowem kluczowym, to co to jest?

+0

Oto kolejne pytanie, które odnosi się do identyfikatora obiektu "Python": [klasa Pythona dziedziczy obiekt] (http://stackoverflow.com/q/4015417/404469). – gary

+2

Dla rekordu, http://stackoverflow.com/q/4015417/404469 nie jest duplikatem. Chodzi o mechanizm dziedziczenia; to pytanie dotyczy i ma wiele odpowiedzi na temat struktury syntaktycznej tego, co się dzieje. – Marcin

Odpowiedz

11

object jest zmienna (globalna). Domyślnie jest powiązany z wbudowaną klasą, która jest katalogiem głównym hierarchii typów.

(Prowadzi to do interesującej właściwości, którą można wykonać we wbudowanym typie i do uzyskania typu zwanego obiektem należy użyć właściwości __bases__.

Wszystko wbudowane, które nie jest słowem kluczowym lub operatorem, jest identyfikatorem.

+0

Dziękuję. Zakładam, że nie możesz wyświetlić kodu, który jest przypisany do tej zmiennej globalnej? – Bentley4

+0

@ Bentley4 Nie wiem, co masz na myśli. – Marcin

+0

Przepraszam. W /usr/lib/python2.7 można znaleźć standardowe moduły python. Po otwarciu plików Pythona możesz zobaczyć zmienne przypisania, ciała klas i funkcje itd. Modułów, których nie możesz zobaczyć za pomocą funkcji pomocy. Czy jest jakiś sposób dostępu do modułu __builtin__ i spojrzenia na zmienną obiektu w tym module? – Bentley4

5

object to identyfikator odnoszący się do typu wbudowanego.

W przeciwieństwie do wielu innych języków, w Pythonie nie ma żadnych typów pierwotnych. Wszystko jest przedmiotem, w tym wszystkimi typami danych.

Nie jestem pewien, dlaczego spodziewasz się, że dziedziczy po randomobject.

+0

Być może nie byłem całkiem jasny; Miałem na myśli, że 'obiekt' nie ma specjalnego znaczenia syntaktycznego lub semantycznego w Pythonie w sposób, powiedzmy,' int' ma w Javie. – Taymon

+0

Ściśle, "typ słowa, którym jest obiekt" jest zmienną, z tego powodu. – Marcin

+1

Zaktualizowana odpowiedź, aby to odzwierciedlić. – Taymon

0

object jest klasą bazową, z której dziedziczy klasę podczas tworzenia nowego stylu w Pythonie 2.

+0

Jednak nie jest to konieczne w Pythonie 3.x. Klasy w nowym stylu są domyślne. –

+0

Dzięki za przypomnienie. – Dikei

+0

W języku Python 3 wszystkie klasy nadal dziedziczą z obiektu. Ponadto "typ słowa, którym jest ten obiekt", jest identyfikatorem. – Marcin

Powiązane problemy