Змея / Говнокод #25690 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
class JSObject(object):
    def __init__(self, d):
        self.__dict__.update(d)
    def __getitem__(self, item):
        return self.__getattribute__(item)
    def __setitem__(self, item, value):
        return self.__setattr__(item, value)
    def __delitem__(self, item):
        return self.__delattr__(item)

    def __getattribute__(self, name):
        try:
            val = object.__getattribute__(self, name)
        except AttributeError:
            return undefined
        else:
            return val

    def __delattr__(self, name):
        try:
            object.__delattr__(self, name)
        except AttributeError:
            pass
        return None
        
    def __str__(self):
        return '[object Object]'
        
    def __repr__(self):
        return self.__dict__.__str__()


class JSUndefined:
    __getitem__ = lambda a, b: undefined
    __setitem__ = lambda a, b, c: undefined
    __delitem__ = lambda a, b, c: undefined
    __getattribute__ = lambda a, b: undefined
    __setattr__ = lambda a, b, c: undefined
    __delattr__ = lambda a, b: undefined
    __str__ = lambda self: 'undefined'
    __repr__ = lambda self: 'undefined'
undefined = JSUndefined()

Перевёл «JavaScript» на «Python».

Запостил: gost gost, (Updated )

Комментарии (32) RSS

  • >>> x = JSObject({'a': 12})
    >>> print(x, '|', repr(x))
    [object Object] | {'a': 12}
    >>> (x.a, x['a'])
    (12, 12)
    >>> x.a = 42
    >>> (x.a, x['a'])
    (42, 42)
    >>> x['b'] = 43
    >>> (x.b, x['b'])
    (43, 43)
    >>> del x.b
    >>> x.b
    undefined
    >>> x.b == undefined
    True
    >>> repr(x)
    "{'a': 42}"
    Ответить
  • Кокогда вы последний раз работали руками?

    Двое мужчин погибли, пытаясь починить водопровод около своих домов в Советском районе Новосибирска. Они сами меняли трубу, так как в «Горводоканале» отказали им в помощи. Тайга.инфо узнала подробности трагедии у очевидцев событий.

    Жители ОбьГЭСа находились в траншее, когда произошло обрушение грунта и их засыпало. О происшествии сообщил СК РФ по Новосибирской области.

    «Предварительно установлено, что 27 июня 2019 года двое мужчин 37-ми и 42-лет по собственной инициативе проводили ремонт водопровода по ул. 1-й пер. Молодости в Советском районе. В тот момент, когда мужчины находились в траншее, произошло обрушение грунта и их засыпало, в результате чего мужчины погибли. В настоящее время проводится проверка Следственным отделом по Советскому району», — говорится в сообщении ведомства.
    Ответить
    • Каждый вечер работаю, правда всё больше правой
      Ответить
    • Нi, броманд закосил и не пошел пацанами трубу ложить.
      Ответить
      • Вроде Сёма у нас разнорабочим работал
        Ответить
        • Но он же в гермашке, зачем ему ехать сюда и помогать копать трубу?
          Ответить
          • Ну он там сидит без работы 20 лет, мог бы к нам приехать, баблишка поднять
            Ответить
  • def __str__(self):
            return '[object Object]'


    Орнул
    Ответить
  • Распад СССР оказался благом для всего мира, заявили ученые

    Распад СССР привел к снижению парниковых выбросов в атмосферу Земли. К таким выводам пришла группа ученых из Германии, Австрии, Бельгии, России и США. Соответствующее исследование специалистов опубликовано в журнале Environmental Research Letters, кратко о нем сообщает Physics World.

    Ученые утверждают, что в результате развала Советского Союза из-за падения сельскохозяйственного производства выбросы парниковых газов в атмосферу планеты за 1992-2011 годы сократились на 7,61 миллиарда тонн, что сравнимо с последствиями от уничтожения человеком лесов в Латинской Америке.

    «После развала СССР переход от плановой к рыночной экономике имел серьезные последствия для сельскохозяйственного сектора и продовольственных систем региона. Рост цены и низкая покупательская способность вызвали снижение потребления [населением] мяса, прежде всего говядины», — сказал Флориан Ширхорн из Института аграрного развития страны с переходной экономикой в Галле (Германия).

    Авторы отмечают, что в первое десятилетие после подписания Беловежских соглашений (в декабре 1991 года) поголовье крупного рогатого скота и свиней на территории бывшего СССР сократилось почти в 2 раза. Ученые отмечают, что регион до сих пор не восстановил утраченное сельскохозяйственное производство, частично восполнив свои потребности в красном мясе за счет поставок продукции из Южной Америки.
    Ответить
  • class JSUndefined:
        __getitem__ = lambda a, b: undefined
    
    undefined = JSUndefined()

    Чет в ступор ввело
    Ответить
    • Да, Питон — приятный язык с динамическим связыванием.

      Грубо говоря, такая __getitem__ эквивалентна «lambda a, b: globals()['undefined']»:
      >>> JSUndefined.__getitem__.__code__.co_names[0]
      'undefined'
      >>> dis.dis(JSUndefined.__getitem__)
       34           0 LOAD_GLOBAL              0 (undefined)
                    2 RETURN_VALUE
      Ответить
        • В "ДССП" (советски аналоног S" Forth" без нормальных управляюших конструкций) тоже было позднее связывание. А в обычном S" Forth" приходится выябыватся с векторами, усли нужна косвеная ракурсия:
          0 VALUE (WORD1) \ ПЕЛЬМЕННАЯ
          
          : WORD2
             ( БЛА БЛА БЛА )
             (WORD1) EXECUTE  \ ПОЗВАЛИ ПОДПРОГРАММК ИЗ ПЕЛЬМЕННОЙ
             ( БЛА БЛА БЛА ) ;
          
          : WORD1
             ( БЛА БЛА БЛА )
             WORD2
             ( БЛА БЛА БЛА ) ;
          
          ' WORD1 TO (WORD1)  \ ЗАПИСАЛИ АДРЕС ПРОЦЕДУРЫ В ПЕЛЬМЕННОЙ
          Именно поэтому я был бы за "ДССП", если бы знал его получше (возможно).
          Ответить
    • И как эта параша догадывается из глобалса взять?
      Ответить
    • <?php
      
      class JSObject implements ArrayAccess {
          private $data = array();
      
          function __construct($d) {
              $this->data = array_replace($this->data, $d);
          }
      
          public function __set($name, $value) {
              $this->data[$name] = $value;
          }
          public function __get($name) {
              global $undefined;
              if(array_key_exists($name, $this->data)) {
                  return $this->data[$name];
              } else {
                  return $undefined;
              }
          }
          public function __isset($name) {
              return array_key_exists($name, $this->data);
          }
          public function __unset($name) {
              if(array_key_exists($name, $this->data)) {
                  unset($this->data[$name]);
              }
          }
      
          public function offsetExists($item) {
              return $this->__isset($item);
          }
          public function offsetGet($item) {
              return $this->__get($item);
          }
          public function offsetSet($item, $value) {
              $this->__set($item, $value);
          }
          public function offsetUnset($item) {
              $this->__unset($item);
          }
             
          function __toString() {
              return '[object Object]';
          }
      
          public function __debugInfo() {
              return $this->data;
          }
      }
      Ответить
      • (продолжение)
        class JSUndefined implements ArrayAccess {
            public function __set($name, $value) {
                global $undefined;
                return $undefined;
            }
            public function __get($name) {
                global $undefined;
                return $undefined;
            }
            public function __isset($name) {
                global $undefined;
                return $undefined;
            }
            public function __unset($name) {
                global $undefined;
                return $undefined;
            }
        
            public function offsetExists($item) {
                global $undefined;
                return $undefined;
            }
            public function offsetGet($item) {
                global $undefined;
                return $undefined;
            }
            public function offsetSet($item, $value) {
                global $undefined;
                return $undefined;
            }
            public function offsetUnset($item) {
                global $undefined;
                return $undefined;
            }
        
            function __toString() {
                return 'undefined';
            }
        }
        
        $undefined = new JSUndefined();
        
        
        $x = new JSObject(['a' => 12]);
        echo sprintf("%s | %s\n", $x, print_r($x, true));
        
        echo sprintf("(%s, %s)\n", $x->a, $x['a']);
        
        $x->a = 42;
        
        echo sprintf("(%s, %s)\n", $x->a, $x['a']);
        
        $x['b'] = 43;
        
        echo sprintf("(%s, %s)\n", $x->b, $x['b']);
        
        unset($x->b);
        
        echo sprintf("%s\n", $x->b);
        
        echo sprintf("%s\n", var_export($x->b == $undefined, true));
        
        echo sprintf("%s\n", print_r($x, true));


        http://ideone.com/s1D1r8

        P.S. Можно обойтись без new, если перекрыть метод __invoke.
        Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8