Не используйте абсолютный путь к каталогу вашего сервера.
Замените $ uploadPath = '/home/v1pyvnw05stp/public_html/images/Articulos/'.$uploadName; с $ _SERVER ['DOCUMENT_ROOT']. 'images / Articulos /'.$ uploadName;
Заменить move_uploaded_file($tmpLoc[$i],$uploadPath[$i]);
на
move_uploaded_file ($ tmpLoc [$ i], $ uploadPath); 114]
Определением класса в Python является экземпляр типа (или экземпляр подкласса типа). Другими словами, само определение класса является объектом. С метаклассами у Вас есть способность управлять экземпляром типа, который становится определением класса.
Когда метакласс вызывается, у Вас есть способность полностью переписать определение класса. У Вас есть доступ ко всем предложенным атрибутам класса, его предков, и т.д. Больше, чем просто введение метода или удаление метода, можно радикально изменить дерево наследования, тип и в значительной степени любой другой аспект. Можно также объединить метаклассы в цепочку вместе для очень динамического и полностью замысловатого опыта.
Я предполагаю реальную выгоду, хотя то, что тип класса остается типом класса. В Вашем примере, вводя:
a_inst = A()
type(a_inst)
покажет, что это - экземпляр MyClass
. Да, isinstance(a_inst, aClass)
возвратился бы True
, но Вы представили подкласс, а не динамично переопределенный класс. Различие там является, вероятно, ключом.
Как rjh указывает, анонимный внутренний класс также имеет последствия расширяемости и производительность. Метакласс обрабатывается только однажды, и момент, что класс определяется, и никогда снова. Пользователи Вашего API могут также расширить Ваш метакласс, потому что он не включается в функции, таким образом, Вы получаете определенную степень расширяемости.
Эта немного старая статья на самом деле имеет хорошее объяснение, которое выдерживает сравнение точно, "функциональное художественное оформление" приближаются к Вам используемый в примере с метаклассами, и показывает историю эволюции метакласса Python в том контексте: http://www.ibm.com/developerworks/linux/library/l-pymeta.html
Метакласс - это класс класса. IMO, парень здесь покрыл это весьма исправно, включая некоторые варианты использования. См. Вопрос переполнения стека «MetaClass», « new », «cls» и «super» - что это за механизм в точности? .
Вы также можете использовать вызываемый тип
.
def hack(f, aClass):
newfunc = lambda self: f()
return type('MyClass', (aClass,), {'f': newfunc})
Я считаю, что использование type
является самым простым способом попасть в мир метаклассов.