python

2013-09-25 12 views
7

'daki çift sınıflama sınıf adlarından kaçının. Bu aptalca bir soru gibi gözükse de, cevabı hiçbir yere rastlayamadım. Çeşitli paketlerimde genellikle her biri bir sınıf içeren bir dizi modülüm var. Bir sınıfın örneğini oluşturmak istediğinizde iki kez programa başvurmak zorunda:python

Örnek: paket obj.py /:

class obj(object): 
    pass 

file.py:

import package.obj 
my_obj = package.obj.obj() 

mi Kodu iki kez yazmam gerekmeyecek şekilde yeniden düzenlemek için bir yol var mı? İdeal olarak sadece package.obj() yazmam gerek.

from package.obj import obj 
my_obj = obj() 
+1

, paketin gelen' kullanabilirsiniz ithalat obj; my_obj = obj() ' –

+0

Neden vurgun ???? –

+1

Çünkü sfpiano, hangi (ler) den bahsettiğini göstermek için gerçek kod parçacıklarını koydu. –

cevap

7

Python Java değildir. Kategoriye göre bir dosyaya çok sayıda sınıfları koymak için çekinmeyin ve sonra dosyayı adlandırın:

import mypackage.image 

this_image = image.png(...) 
that_image = image.jpeg(....) 

dersleriniz o kadar büyükse o kadar bakım yükü hafifletmek için ayrı dosyalarda onları istiyorum, ne ala, ama yapmanız gerekir o zaman kullanıcılarınızda fazladan ağrıya neden olmaz (ya da kendi paketinizi kullanırsanız;).

mypackage en __init__.py (veya image.py):

from _jpeg import jpeg 
from _png import png 

mypackage en _jpeg.py:

oldukça düz ad sunmak (örneğin image olarak ya da bir kategori dosyası) paketin __init__ dosyada kamu sınıfları toplayın
class jpeg(...): 
    ... 

mypackage en _png.py:

class png(...): 
    ... 

kullanıcı kodu:

# if gathered in __init__ 
import mypackage 
this_image = mypackage.png(...) 
that_image = mypackage.jpeg(...) 

veya:. Sonra file.py` `obj ithalat obj` gelen` __init __ py`, `in

# if gathered in image.py 
from mypackage import image 
this_image = image.png(...) 
that_image = image.jpeg(....) 
5

Sen from ... import ... deyimi kullanabilirsiniz. Yol bu. Modülünüzün 'sınıflarını' adlandırın ve sınıfınızı 'MyClass' olarak adlandırın.

from package.classes import MyClass 

myobj = MyClass() 
1

sizin sınıfları ve modülleri anlamlı isimler verin: