Bu, python kullanarak aynı verinin farklı biçimlerinden bir sınıf veya türün örneğinin oluşturulmasına yönelik en iyi uygulama ile ilgili bir sorudur. Bir sınıf metodu kullanmak daha mı iyidir yoksa ayrı bir işlevi tamamen kullanmak daha mı iyidir? Bir belgenin boyutunu tanımlamak için kullanılan bir dersim olduğunu söyleyelim. (Not: Bu yalnızca bir örnek olduğunu bir belgenin boyutunu açıklamak için en iyi yolu sınıfının bir örneğini DEĞİL oluşturmak için en iyi yolu bilmek istiyorum..)Python nesnesi için fabrika yöntemi - en iyi uygulama
class Size(object):
"""
Utility object used to describe the size of a document.
"""
BYTE = 8
KILO = 1024
def __init__(self, bits):
self._bits = bits
@property
def bits(self):
return float(self._bits)
@property
def bytes(self):
return self.bits/self.BYTE
@property
def kilobits(self):
return self.bits/self.KILO
@property
def kilobytes(self):
return self.bytes/self.KILO
@property
def megabits(self):
return self.kilobits/self.KILO
@property
def megabytes(self):
return self.kilobytes/self.KILO
Benim __init__
yöntem bir boyut değerini alır bit olarak temsil edilir (bitler ve sadece bitler ve ben bu şekilde tutmak istiyorum) ama bir bayt cinsinden boyut değerine sahip olduğumu söyler ve sınıfımın bir örneğini oluşturmak isterim. Bir sınıf metodu kullanmak daha mı iyidir yoksa ayrı bir işlevi tamamen kullanmak daha mı iyidir?
def create_instance_from_bytes(bytes):
bits = bytes * Size.BYTE
return Size(bits)
Bu
class Size(object):
"""
Utility object used to describe the size of a document.
"""
BYTE = 8
KILO = 1024
@classmethod
def from_bytes(cls, bytes):
bits = bytes * cls.BYTE
return cls(bits)
VEYA
bir sorun gibi görünmeyebilir ve belki de her ikisi örnekler geçerlidir ama bu konuda böyle bir şey uygulamak gerekir her zaman düşünüyorum. Uzun bir süredir sınıf yöntemini tercih ettim çünkü sınıf ve fabrika yöntemini birbirine bağlamanın örgütsel faydalarını seviyorum. Ayrıca, bir sınıf yöntemi kullanmak, herhangi bir alt sınıfın örneklerini oluşturma yeteneğini korur, böylece daha fazla nesne yönlendirilir. Öte yandan, bir arkadaş bir kez “Şüphe edildiğinde, standart kütüphanenin ne yaptığını” söyledi ve ben de standart kütüphanede bunun bir örneğini bulmayacağım.Her türlü geri bildiriminiz için teşekkür ederiz.
Alkış
Bir bozuk para çeviririm. Çoğu python kitaplığı, prosedürel API'leri tercih ediyor gibi görünmektedir, ancak bunun nedeni, kod tabanınızda dahili olarak kullanılabilen yeniden kullanılabilir koddan farklı bir şekilde tüketilmesidir. – millimoose
PS, “bytes” değişkenini çağırmayın; Bu yerleşik bir tür (2.6 ve üstü). – abarnert
Ve tabi ki fark ettim ki aynı hatayı benim cevabımda yaptım: 'Boyut (bayt = 20)'. Yaptığımı yapma, dediğimi yap. :) – abarnert