Вопросы по теме 'magic-methods'

Где документация Python для специальных методов? (__init__, __new__, __len__, )
Где полный список специальных методов двойного подчеркивания/дандера, которые можно использовать в классах? (например, __init__ , __new__ , __len__ , __add__ )
22740 просмотров
schedule 18.06.2022

используя волшебный метод __set() с 2D-массивами
Если у меня есть следующий класс реестра: Class registry { private $_vars; public function __construct() { $this->_vars = array(); } public function __set($key, $val) { $this->_vars[$key] = $val;...
2690 просмотров

Использование __set с массивами решено, но почему?
Проведя небольшое исследование, я в конце концов наткнулся на ответ на вопрос, который я все равно вскоре задал здесь; Как вы работаете с массивами с помощью магических методов __get и __set в PHP? Всякий раз, когда я пытался установить...
1594 просмотров

Работа с __get() по ссылке
С примером класса, такого как этот: class Test{ public function &__get($name){ print_r($name); } } Экземпляр Test отменит вывод как таковой: $myTest = new Test; $myTest->foo['bar']['hello'] = 'world'; //outputs...
1945 просмотров

По умолчанию поведение геттера по умолчанию, если свойство не выходит
В настоящее время мне нужно расширить класс, чтобы добавить к нему функциональность (у меня нет доступа к базовому классу, чтобы изменить его), и у меня возникла проблема с ним. По сути, мне нужно, чтобы функция Magic Getter возвращала набор...
328 просмотров
schedule 19.07.2023

Как использовать is_callable с __call?
Я использую PHP 5.3, в котором введены замыкания. Поскольку теперь у меня есть замыкания, доступные во всем моем приложении (и фреймворке), я использую is_callable, чтобы увидеть, что это за обработчик $callback . Если $callback is_callable ,...
3630 просмотров

Как реализовать магический метод __isset() в PHP?
Я пытаюсь заставить такие функции, как empty() и isset() , работать с данными, возвращаемыми методами. Что у меня есть до сих пор: abstract class FooBase{ public function __isset($name){ $getter = 'get'.ucfirst($name);...
8329 просмотров
schedule 08.06.2023

Пример магических методов PHP
У меня есть этот вопрос из учебного пособия Zend PHP и я не могу найти правильного объяснения... <?php class Magic { public $a = "A"; protected $b = array("a"=>"A", "b"=>"B", "c"=>"C"); protected $c =...
1482 просмотров
schedule 06.09.2022

Почему __getattribute__ не вызывается при неявном вызове __getitem__?
Пытаясь обернуть произвольные объекты, я столкнулся с проблемой со словарями и списками. Исследуя, мне удалось придумать простой кусок кода, поведение которого я просто не понимаю. Я надеюсь, что некоторые из вас могут сказать мне, что происходит:...
705 просмотров
schedule 29.05.2022

Как определить поля модели с помощью idiorm/granada, не нарушая функциональность ORM?
Форма PHP Granada на основе Idiorm работает следующим образом для извлечения полей из базы данных: class ORM { ... public function __get($key) { return $this->get($key); } } class ORMWrapper extends ORM { ... public...
549 просмотров
schedule 07.08.2022

Увеличение на __toString
Я не уверен, каким должен быть заголовок, но код должен объяснить это лучше: class Group { private $number = 20; public function __toString() { return "$this->number"; } } $number = new Group(); echo $number, PHP_EOL; echo...
415 просмотров
schedule 29.10.2022

Как получить доступ к нескольким свойствам с помощью волшебного метода (__get и __set)?
Недавно я изучал магические методы, __get и __set , и мне было интересно, как на самом деле установить и получить несколько свойств в классе. Я знаю, что он отлично работает только с одной переменной или массивом, но я не уверен в доступе к...
1913 просмотров
schedule 22.07.2023

Метод вызова при установке объявленного публичного свойства
Проблема, с которой я столкнулся, заключается в том, что магический метод __set() по своей конструкции работает только для необъявленных свойств. Есть ли решение, похожее на __set(), для объявленных свойств, где я могу вызвать метод, когда свойство...
38 просмотров

Волшебный метод для `self[key] += value`?
Существует магический метод Python __setitem__ для присвоения = типам последовательностей. Существуют ли магические методы для расширенного присвоения += на уровне контейнера? Похоже, что операция изящно разбивается на расширенное присвоение...
1412 просмотров

Python __dict__
Атрибут __dict__ должен содержать определенные пользователем атрибуты. Но если мы напечатаем __dict__ пустого класса, я также получу: __module__ __dict__ __weakref__ __doc__ Которые предварительно заполняются Python в атрибуте __dict__...
3876 просмотров
schedule 24.03.2023

Почему functools.lru_cache не кэширует __call__ при работе с обычными методами
Я пытался сделать конкретный экземпляр functools.lru_cache , как описано в этом ответе , но их решение терпит неудачу при использовании метода __call__ . class test: def __init__(self): self.method = lru_cache()(self.method)...
971 просмотров
schedule 05.05.2023

Список всех методов Python dunder. Какие из них вам нужно реализовать, чтобы правильно проксировать объект?
Я пытаюсь создать объектный прокси. Поиск атрибутов/свойств можно выполнить, просто реализовав методы __getattribute__ , __setattr__ и __delattr__ . Однако другие функции, такие как len(x), x[], bool(x) , требуют реализации других методов...
4549 просмотров

Динамически наследовать все магические методы Python от атрибута экземпляра
Во время работы над проектом я столкнулся с интересной ситуацией: Я создаю класс, который мы можем назвать ValueContainer , который всегда будет хранить одно значение в атрибуте value . ValueContainer , чтобы иметь пользовательские функции,...
738 просмотров

Какой метод нарезает строку в Python?
В Python эквивалентом [синтаксического сахара] 'bottle'[1] является 'bottle'.__getitem__(1) Каков тогда эквивалентный метод 'bottle'[1:3] ?
30 просмотров
schedule 26.07.2022