Можно ли добавить метод к классу объектов и использовать его для всех объектов?Класс объекта переопределить или изменить
ответ
В атрибутах Python реализованы с использованием словаря:
>>> t = test()
>>> t.__dict__["foo"] = "bla"
>>> t.foo
'bla'
Но для "объекта", он использует 'dictproxy' в качестве интерфейса для предотвращения такого присваивания:
>>> object.__dict__["test"] = "test"
TypeError: 'dictproxy' object does not support item assignment
Так что нет, вы не можете.
NB: вы не можете изменять тип метакласса напрямую. Но поскольку Python очень гибкий, я уверен, что Гуру может найти способ достичь того, чего вы хотите. Любой черный волшебник здесь :-)?
Может быть, через метаклассы? –
Нет, метаклассы будут влиять только на классы и объекты, которые их используют, а не на существующие встроенные типы, такие как объект, int, str, float и т. Д. Итак, «все объекты» просто не произойдет. (Вы можете вставлять новые функции в __builtin__, конечно, что сделает их такими же доступными, но они не будут МЕТОДОМ объекта встроенного типа). –
>>> object.test = "Test" Traceback (most recent call last): File "", line 1, in TypeError: can't set attributes of built-in/extension type 'object'
Не похоже. (Python 2.5.1)
, так что ответ НЕТ?)) –
Я так думаю, но я не уверен на 100%. –
Нет, внутренности Python очень заботятся о том, чтобы встроенные типы НЕ изменялись - очень разные варианты дизайна от Ruby's. Невозможно сделать объект «monkeypatchable» без глубокого проникновения в C-кодированные внутренние компоненты и перекомпилировать среду исполнения Python, чтобы сделать совсем другую версию (это для классического CPython, но я считаю, что тот же принцип справедлив для других хороших реализаций, таких как как Jython и IronPython, просто s/C/Java/и S/C/C#/соответственно ;-).
- 1. Переопределить класс объекта в R
- 2. как переопределить класс, или ундекларировать класс или переопределить класс в python?
- 3. Как переопределить класс .NET
- 4. можно переопределить класс css
- 5. Как создать или изменить класс в JQuery перед созданием объекта?
- 6. Расширить, изменить или переопределить bootstrap.php Joomla?
- 7. Невозможно переопределить класс Google_Service_Drive
- 8. .equals() или ==, сравнивая класс объекта
- 9. Переопределить String как класс
- 10. Переопределить изменения Комментарии изменить список
- 11. Как изменить класс объекта coredata на подкласс
- 12. Невозможно переопределить класс AbstractFindAdapter
- 13. Переопределить метод на родительский класс
- 14. узел Javascript класс метод переопределить
- 15. Как переопределить класс в C#
- 16. Невозможно переопределить класс AGI_AsteriskManager
- 17. Как переопределить класс CSS?
- 18. Rails: Как переопределить класс
- 19. PHP: невозможно переопределить класс
- 20. переопределить класс MKPointAnnotation
- 21. Переопределить класс инициализации?
- 22. Magento переопределить класс onepageController.php
- 23. Невозможно переопределить класс WPDB
- 24. Как переопределить класс
- 25. CakePHP - Невозможно переопределить класс
- 26. Как переопределить класс?
- 27. Как динамически изменить класс объекта на C#?
- 28. Можно ли изменить класс объекта доктрины?
- 29. изменить класс имя объекта в jquery
- 30. Как переопределить класс родителя с использованием нового объекта?
Duplicate: http://stackoverflow.com/questions/972/adding-a-method-to-an-existing-object –