Нет, нет способа переопределить оператор присваивания в python, поэтому вы не можете сделать loaded = 5
(вы можете переопределить другие вещи, чтобы он мог работать)
__call__
, чтобы разрешить loaded(5)
__lshift__
, разрешить loaded << 5
__ior__
, чтобы разрешить loaded |= 5
( однако будьте предупреждены ваши коллеги, или будущие коллеги могут никогда не простить вас)
также, вещи, которые происходят в пределах блока with XXXX as Y:
, (обычно) не доступны для метода, который дает контекст, если только эта область ранее не была доступна для места, дающего область (то есть глобальное пространство имен и т.д.)
Еще нет, существует предложенный (теперь доступен) __callStatic
Метод документов в конвейере длится, я знал. Иначе __call
и другой __
волшебные методы не доступны для использования ничем кроме экземпляра объекта.
Необходимо использовать другой волшебный метод, __callStatic
- это только доступно в PHP> = 5.3, который еще не был на самом деле выпущен.
Как описано прежде, нет никакой волшебной статической вызывающей стороны. Но можно кодировать как это:
class First {
public static function test1(){
return 1;
}
public static function test2(){
return 2;
}
}
class Second {
public static function test1(){
if(func_num_args()>0){
return func_get_args();
}
return 21;
}
public static function test2(){
return 22;
}
}
class StaticFactory {
public static function factory($class, $method){
if(func_num_args()>2){
$args = func_get_args();
array_shift($args);
array_shift($args);
return call_user_func_array(array($class,$method), $args);
}else{
return call_user_func_array(array($class,$method), array());
}
}
}
print_r(StaticFactory::factory("Second", "test1", 1, false, true));
print_r(StaticFactory::factory("First", "test1"));