Что такое частичный класс? - PullRequest
8 голосов
/ 17 ноября 2008

Что и как можно использовать в C #.
Можете ли вы использовать ту же концепцию в Python / Perl?

Ответы [ 8 ]

19 голосов
/ 17 ноября 2008

A частичный тип (это не обязательно должен быть класс; структуры и интерфейсы также могут быть частичными) - это в основном один тип, код которого распределен по нескольким файлам.

Основное использование для этого - позволить генератору кода (например, разработчику Visual Studio) «владеть» одним файлом, тогда как рукописный код помещается в другой.

Я не знаю, имеют ли Python / Perl те же возможности, я боюсь.

9 голосов
/ 17 ноября 2008

Частичный класс c # уже описан здесь, поэтому я просто расскажу о части Python. Вы можете использовать множественное наследование для элегантного распределения определения класса.

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()
6 голосов
/ 17 ноября 2008

Частичный класс - это просто класс, содержащийся в нескольких файлах. Иногда бывает так, что одна часть может быть сгенерирована машиной, а другая часть отредактирована пользователем.

Я использую их в C #, когда создаю класс, который становится слишком большим. Я добавлю методы доступа и конструкторы в один файл, а все интересные методы - в другой файл.

В Perl у вас будет просто два (или более) файла, каждый из которых объявит себя в пакете:

(основная программа)

    use MyClass;

(в MyClass.pm)

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

(в MyClassOtherStuff.pm)

    package MyClass;
    # [...rest of code here...]
2 голосов
/ 17 ноября 2008

Понятие частичных типов уже объяснено.

Это можно сделать на python. Например, сделайте следующее в оболочке Python.

class A(object):
    pass

obj = A()

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

obj.identify()
1 голос
/ 17 ноября 2008

Поскольку python является динамическим языком, вам не нужно такое понятие, как частичный класс. В Python возможно расширить объект с функциональностью во время выполнения, чтобы можно было разбить объявление класса на разные файлы

0 голосов
/ 19 марта 2013

Частичный класс пригодится, когда у вас есть auto-generated code каким-либо инструментом. См. Вопрос Структура проекта для Schema First Service Development с использованием WCF для примера.

Вы можете поместить свою логику в частичный класс. Даже если автоматически созданный файл будет уничтожен и воссоздан, ваша логика сохранится в частичном классе.

0 голосов
/ 17 ноября 2008

Python также имеет мета-классы, но это больше похоже на шаблонный класс, чем на частичный класс. Хорошим примером использования метакласса является Django ORM. Все ваши табличные модели наследуются от базового класса модели, который также получает функциональность, включенную в мета класс. Это довольно крутая концепция, которая включает активную запись, например, шаблон (это полная активная запись?).

0 голосов
/ 17 ноября 2008

Частичный тип - это тип, объявление которого разделено между несколькими файлами. Имеет смысл использовать их, если у вас большой класс, который трудно обрабатывать и читать для типичного разработчика, чтобы разделить определение этого класса в отдельных файлах и поместить в каждый файл логически разделенный фрагмент кода (например, все общедоступные методы и свойства в одном файле, частные в другом, код обработки БД в третьем и т. д.)

Нет, у вас нет того же синтаксического элемента в Python.

...