Python распределяется как источник. Самая идея закрытого метода имеет очень мало смысла.
программист, который хочет расшириться B
, разбитый проблемой конфиденциальности, смотрит на источник для B
, копирует и вставляет исходный код для method
в подкласс C
.
, Что Вы получили через "конфиденциальность"? Лучшее, на которое можно надеяться, должно расстроить потенциальных клиентов в копирование и вставку.
В худшем случае, они отбрасывают Ваш пакет, потому что они не могут расширить его.
И да, весь открытый исходный код расширяется так или иначе. Вы не можете предвидеть все и каждое использование, к которому Вы кодируете, будет помещен. Предотвращение некоторого будущего использования трудно сделать, когда код распределяется как источник.
Видят , Как я защищаю код Python?
Редактирование На "защищенном от дурака" коде.
Первый, Python распределяется как источник 90% времени. Так, любой идиот, который загружает, устанавливает, и затем отказывается читать руководство API и звонит, методы не в порядке все еще имеет источник для выяснения то, что пошло не так, как надо.
у Нас есть три класса идиотов.
Люди, которые отказываются читать руководство API (или просматривать его и игнорировать соответствующие части) и называть методы не в порядке несмотря на документацию. Можно попытаться сделать что-то частным, но это не поможет, потому что они будут делать что-то еще неправильно - и жаловаться на это. [Я не назову имена, но я работал с людьми, которые, кажется, проводят много времени, называя API неправильно. Кроме того, Вы будете видеть вопросы как это на ТАК.]
можно только помочь им с рабочим примером кода, который они могут вырезать и вставить.
Люди, которые смущены API и называют методы каждым различным путем, можно вообразить (и некоторые, которые Вы не можете.) Можно попытаться сделать что-то частным, но они никогда не будут получать API.
можно только помочь им путем обеспечения рабочего примера кода; даже тогда они вырежут и вставят его неправильно.
Люди, которые отклоняют Ваш API и хотят переписать его для создания его "защищенным от неправильного использования".
можно предоставить им рабочий пример кода, но они не любят API и настоят на том, чтобы переписывать его. Они скажут Вам, что Ваш API является сумасшедшим, и они изменили к лучшему его.
можно вовлечь этих людей в возрастающую гонку вооружений "защищения от неквалифицированного вмешательства". Все, что Вы соединяете, они демонтируют.
На данном этапе, что конфиденциальность сделала для Вас? Некоторые люди откажутся понимать его; некоторые люди смущены им; и некоторые люди хотят работать вокруг этого.
Как насчет общественности, и позволяют людям, которых Вы звоните, "идиоты" извлекают уроки из Вашего кода?
JPA не предоставляет API критериев, как в Hibernate. Но вы можете использовать ejb3criteria , библиотеку, которая предоставляет API на основе дизайна Hibernate Criteria API для EJB3 Persistence. ejb3criteria можно использовать с любой реализацией EJB3 Persistence.
Одной из новых функций, представленных в JPA 2.0, является API критериев. Вам понадобится одна из реализаций JPA2:
Доступ к запросам критериев осуществляется через EntityManager.getCriteriaBuilder () и выполняется через обычный API запросов.
EntityManager em = ...;
CriteriaBuilder qb = em.getCriteriaBuilder();
CriteriaQuery<Employee> query = qb.createQuery(Employee.class);
Root<Employee> employee = query.from(Employee.class);
query.where(qb.equal(employee.get("firstName"), "Bob"));
List<Employee> result = em.createQuery(query).getResultList();