Parametre olarak Nesneli Sınıf


114

Bazı python kodunu ölçekleme koduna çevirmeye çalışıyorum. Yani Python'da tam bir çaylağım.

Ama neden bazı sınıfların parametre olarak nesnesi var ama onu asla açıkça kullanmıyor? İlk etapta bir parametre olarak sahip olmanın nedeni nedir?

Misal:

class Table(object)

Zaman ayırdığın için teşekkürler.


Yanıtlar:


112

Python2 bu beyan Tablebir olmaya yeni tarzı sınıfı ( "klasik" sınıfına aksine). Python3'te tüm sınıflar yeni stil sınıflardır, bu nedenle artık buna gerek yoktur.

Yeni stil sınıfları, klasik sınıfların sahip olmadığı birkaç özel niteliğe sahiptir.

class Classic: pass
class NewStyle(object): pass

print(dir(Classic))
# ['__doc__', '__module__']

print(dir(NewStyle))
# ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

Ayrıca, özellikler ve süper , klasik sınıflarla çalışmaz.

Python2'de tüm sınıfları yeni stil sınıflar yapmak iyi bir fikirdir. (Geriye dönük uyumluluk uğruna, standart kitaplıktaki birçok sınıf hala klasik sınıflar olsa da.)

Genel olarak aşağıdaki gibi bir ifadede

class Foo(Base1, Base2):

Footemel sınıflardan miras alan bir sınıf olarak bildiriliyor Base1ve Base2.

objectPython'daki tüm sınıfların anasıdır. O kadar devralan yeni tarzı sınıftır objectmarkaların Tableyeni tarzı sınıfı.


Python3'te nesnenin parametre olarak gerekli olmadığından bahseden bir kaynağa beni yönlendirebilir misin? Onu bulamıyorum. Teşekkür ederim
Snow

1
StackOverflow'da ( örneğin burada) birçok kez bahsedildi , ancak bununla ilgili basit bir açıklamayı belgelerde bulamadım. Öğreticide örtük olarak gösterilir ( objectsınıf temelleri listesinden çıkarılmasıyla) .
unutbu

1
Python3 dokümanlar "yeni tarzı sınıfı" "sınıfların lezzet eski adıdır aynı zamanda devlet artık tüm sınıf nesneler için kullanılan (vurgu bana ait)". Ve Python2 belgeleri , "yeni stil sınıfın" miras alan herhangi bir sınıf olduğunu belirtir object. Bir araya getirilen iki ifade object, Python3'teki tüm sınıflar yeni stil sınıfları olduğundan, Python3'teki sınıf tabanları listesine dahil etmenize gerek olmadığı anlamına gelir.
unutbu

21

TableSınıf olarak adlandırılan bir sınıf uzanan object. Bu bir tartışma değil. objectAçıkça genişletmek isteyebilmenizin nedeni , sınıfı yeni stil bir sınıfa dönüştürmesidir. objectPython 3'e kadar genişleyeceğini açıkça belirtmezseniz , varsayılan olarak eski tarz bir sınıf olacaktır. (Python 3'ten beri, açıkça genişletseniz de genişletmeseniz de tüm sınıflar yeni stildedir object.)

Yeni tarz ve eski tarz sınıflar hakkında daha fazla bilgi için lütfen bu soruya bakın .


1
Bu daha basit ve kısa cevaptır. Teşekkürler.
Sabuncu

3

"Yeni stil" ile "eski stil" arasındaki sınıf ayrımının Python 2.x'e özgü olduğuna ve 3.x'te tüm sınıfların "yeni stil" olduğuna dikkat edin.


2

Class Table ve Class Table (nesne) Python için farklı değildir.

Bu bir parametre değildir, nesneden uzanır (diğer birçok dil gibi temel Sınıftır).

Tüm söylediği, "nesne" de tanımlanan her şeyi miras aldığıydı. Bu, varsayılan davranıştır.


3
Otomatik olarak genişleyen sınıflar objectyalnızca Python 3'te varsayılan davranıştır. Python 2'de, bir sınıf genişletme nesnesi, nesneyi genişletmeyen bir sınıfın sahip olmayacağı niteliklere sahiptir.
Lewis Ellis

1

nesne, python'da tanımlanan en temel sınıf nesnesi türüdür. Nesnenin nitelikleri aşağıdaki gibi görülebilir

** >>> dir (nesne)

[' sınıf ', ' delattr ', ' belge ', ' biçim ', ' öznitelik ', ' karma ', ' init ', ' yeni ', ' azalt ', ' azaltma_ex ', ' repr ', ' setattr ', ' sizeof ',' str ',' subclasshook '] **

Yani Tablo (nesne) sadece kalıtımdır.!


0

1) Sınıf adı (nesne): 2) Sınıf adı: İkisi de aynıdır ama birincisi yazım açısından çok daha iyidir, diğer sınıfları bir başkasına devralırken daha iyi görünür, homojen görünür.

Nasıl aynı? Yani, Python'daki her şeyin nesnenin altına girmesi, Python'daki her şeyin nesne özelliğine sahip olduğu anlamına gelir, yazsa da yazmasa da anlayacaktır. İlk başta bunu açıkça ikinci olarak söylemediğimizi söyledik.


Python 2'de durum böyle değil, ayrıntılar için kabul edilen cevaba bakın.
niemmi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.