Nesne yönelimli programlama (OOP), örneğin, birinci sınıf işlevlere sahip olmayan Java'da Python'da olduğundan farklı olduğundan, bu soru biraz agnostiktir, ancak tamamen değildir .
Başka bir deyişle, Java gibi bir dilde gereksiz sınıflar oluşturduğum için kendimi daha az suçlu hissediyorum, ancak Python gibi daha az dil bilen dillerde daha iyi bir yol olabileceğini düşünüyorum.
Programımın birkaç kez nispeten karmaşık bir işlem yapması gerekiyor. Bu işlem çok fazla "defter tutma" gerektirir, bazı geçici dosyalar yaratmalı ve silmeli.
Bu yüzden aynı zamanda bir çok başka “alt işlem” olarak da adlandırılması gerekiyor - her şeyi büyük bir yönteme koymak çok hoş, modüler, okunabilir, vb. Değil.
Şimdi bunlar aklıma gelen yaklaşımlar:
1. Yalnızca bir genel metoda sahip olan ve alt işlemler için gereken iç durumu örnek değişkenlerinde tutan bir sınıf yapın.
Bu gibi bir şey olurdu:
class Thing:
def __init__(self, var1, var2):
self.var1 = var1
self.var2 = var2
self.var3 = []
def the_public_method(self, param1, param2):
self.var4 = param1
self.var5 = param2
self.var6 = param1 + param2 * self.var1
self.__suboperation1()
self.__suboperation2()
self.__suboperation3()
def __suboperation1(self):
# Do something with self.var1, self.var2, self.var6
# Do something with the result and self.var3
# self.var7 = something
# ...
self.__suboperation4()
self.__suboperation5()
# ...
def suboperation2(self):
# Uses self.var1 and self.var3
# ...
# etc.
Bu yaklaşımla gördüğüm sorun, bu sınıfın durumunun yalnızca içsel olarak anlam ifade etmesi ve örneklerini tek kamuya açık yöntemini çağırmak dışında hiçbir şey yapamamasıdır.
# Make a thing object
thing = Thing(1,2)
# Call the only method you can call
thing.the_public_method(3,4)
# You don't need thing anymore
2. Sınıfsız bir sürü fonksiyon yapın ve içsel olarak ihtiyaç duyulan çeşitli değişkenleri aralarında (argümanlar olarak) iletin.
Bununla ilgili gördüğüm sorun, fonksiyonlar arasında çok fazla değişken geçirmem gerekiyor. Ayrıca, işlevler birbirleriyle yakından ilişkili olacak, ancak birlikte gruplandırılmayacaktı.
3. Gibi 2. ancak durum değişkenlerini geçmek yerine küresel hale getirin.
İşlemi farklı girişlerle bir kereden fazla yapmak zorunda olduğum için bu hiç iyi olmaz.
Dördüncü, daha iyi bir yaklaşım var mı? Olmazsa, bu yaklaşımlardan hangisi daha iyi olurdu ve neden? Kaçırdığım bir şey mi var?