2013-12-17 18 views
11

Sınıf içinde yeni bir nesne oluşturmak için Class() veya self .__ class __() kullanmanın avantajları/dezavantajları nelerdir? Bir yol genel olarak tercih edilir mi?Sınıf() vs self .__ class __()?

İşte bahsettiğim şeyin bir örneği. Eğer bir alt sınıf örneğinden bu yöntemi çağırırsanız

class Foo(object):                
    def __init__(self, a):               
    self.a = a                 

    def __add__(self, other):              
    return Foo(self.a + other.a)             

    def __str__(self):                
    return str(self.a)               

    def add1(self, b):                
    return self + Foo(b)               

    def add2(self, b):                
    return self + self.__class__(b)            

cevap

10

self.__class__ bir alt sınıf türünü kullanır. sınıf açıkça açıkça

ör .: Tabii

class Foo(object): 
    def create_new(self): 
     return self.__class__() 

    def create_new2(self): 
     return Foo() 

class Bar(Foo): 
    pass 

b = Bar() 
c = b.create_new() 
print type(c) # We got an instance of Bar 
d = b.create_new2() 
print type(d) # we got an instance of Foo 

(doğal olarak) belirtmek ne olursa olsun sınıf kullanacak kullanma

, bu örnek benim açımdan göstermek için başka oldukça işe yaramaz. Burada bir classmethod kullanmak çok daha iyi olurdu.

+0

Ah. Bu mantıklı. – Ben

+0

Harika cevap! Çabuk ol, +1. Btw, güzel şapka! – aIKid

+1

@aIKid - Sanırım StackOverflow şapkaları Noel zamanı hakkındaki en sevdiğim şeylerden biri. Ne komik olsa da ... Gerçek hayatta ne giyeceğine karar vermek için hiç zamanım zor olmadı - Yığın Taşması şapkaları tamamen başka bir konu ... – mgilson

İlgili konular