2008-11-17 17 views

Respuesta

9

La clase parcial de C# ya se ha explicado aquí, así que solo cubriré la parte de python. Puede usar herencia múltiple para distribuir elegantemente la definición de una clase.

class A_part1: 
    def m1(self): 
     print "m1" 

class A_part2: 
    def m2(self): 
     print "m2" 

class A(A_part1, A_part2): 
    pass 

a = A() 
a.m1() 
a.m2() 
+0

Mucho mejor que el monopatch enfoques en otras respuestas. +1 –

19

A partial type (no tiene que ser una clase; las estructuras y las interfaces también pueden ser parciales) es básicamente un tipo único que tiene su código distribuido en varios archivos.

El uso principal de esto es permitir que un generador de código (por ejemplo, un diseñador de Visual Studio) "posea" un archivo, mientras que el código escrito a mano se coloca en otro.

No tengo idea de si Python/Perl tienen las mismas capacidades, me temo.

+0

No hay compilador, por lo que no hay coincidencias cercanas en Python. Hay clases abstractas, que no se pueden usar de manera significativa; una subclase es la forma habitual de completarlos. O siempre puedes hacer un parche en las características que faltan :-( –

+0

No soportado directamente en python, pero podrías hackearlo haciendo una clase base de la otra clase. MyClass (MyClassPartial). Esto es probablemente lo que S.Lott quiso decir con ' clases abstractas '. Plan b: use decorators: @MyClassPartialFun \ nclass MyClass (object) – Aaron

+0

*** Jon Skeet no sabe? *** El Universo acaba de lanzar una excepción. – MikeTheLiar

1

Como Python es un lenguaje dinámico, no necesita un concepto como clase parcial. En python es posible extender el objeto con funcionalidad en tiempo de ejecución para poder romper la declaración de clase en diferentes archivos

2

El concepto de tipos parciales ya se ha explicado.

Esto se puede hacer en python. Como ejemplo, haga lo siguiente en un shell de python.

class A(object): 
    pass 

obj = A() 

def _some_method(self): 
    print self.__class__ 
A.identify = _some_method 

obj.identify() 
+1

Esto sería parche de mono. –

6

Una clase parcial es simplemente una clase que está contenida en más de un archivo. A veces es para que una parte se genere en máquina y otra parte sea editada por el usuario.

Los uso en C# cuando estoy haciendo una clase que se está haciendo demasiado grande. Pondré los accesos y constructores en un solo archivo y todos los métodos interesantes en un archivo diferente.

En Perl, sólo tendría dos (o más) archivos que indiquen cada a sí mismos en un paquete:

(programa principal)

use MyClass; 

(en MyClass.pm)

use MyClassOtherStuff; 
    package MyClass; 
    # [..class code here...] 

(en MyClassOtherStuff.pm)

package MyClass; 
    # [...rest of code here...] 
0

A Tipo parcial es un tipo cuya declaración está separada en varios archivos. Tiene sentido usarlos si tiene una gran clase, que es difícil de manejar y leer para un desarrollador típico, para separar esa definición de clase en archivos separados y para poner en cada archivo una sección de código separada lógicamente (por ejemplo, todos los públicos métodos y propiedades en un archivo, privado en otro, código de manejo de datos en tercera y así sucesivamente ...)

No, no tiene el mismo elemento sintáctico en Python.

0

Python también tiene metaclases pero se parece más a una clase de plantilla que a una clase parcial. Un buen ejemplo de uso de clase meta es el Django ORM. Todos sus modelos de tabla heredan de una clase de modelo base que también obtiene funcionalidad incluida de una metaclase. Es un concepto muy bueno que permite un patrón de registro activo (¿es un registro activo completo?).

0

Clase parcial es útil cuando tiene auto-generated code por alguna herramienta. Refiera la pregunta Project structure for Schema First Service Development using WCF para un ejemplo.

Puede poner su lógica en la clase parcial. Incluso si el archivo generado automáticamente se destruye y vuelve a crear, su lógica persistirá en la clase parcial.

Cuestiones relacionadas