Ниже, используя отражение, кажется мне лучшим вариантом с учетом общедоступных свойств, так как с этим вам не нужно беспокоиться о добавлении / удалении свойств (хотя это не так распространенный сценарий). Это, как мне показалось, лучше работает. (По сравнению с секундомером).
public int getHashCode()
{
PropertyInfo[] theProperties = this.GetType().GetProperties();
int hash = 31;
foreach (PropertyInfo info in theProperties)
{
if (info != null)
{
var value = info.GetValue(this,null);
if(value != null)
unchecked
{
hash = 29 * hash ^ value.GetHashCode();
}
}
}
return hash;
}
Это зависит от того, как пользователь устанавливает Ваш пакет. Если пользователь на самом деле выполняет "setup.py установку", это довольно легко: Просто добавьте, другая подкоманда к команде установки (скажите, install_vim), чей выполненный () метод скопирует файлы, которые Вы хотите в местах, где Вы хотите их. Можно добавить подкоманду, чтобы установить sub_commands, и передать команду в установку ().
, Если Вы хотите сценарий постустановки в двоичном файле, это зависит от типа двоичного файла, который Вы создаете. Например, bdist_rpm, bdist_wininst, и bdist_msi имеют поддержку сценариев постустановки, потому что базовая упаковка форматирует сценарии постустановки поддержки.
bdist_egg не поддерживает механизм постустановки дизайном: