1. Python / Говнокод #25690

    +3

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 28 Июня 2019

    Комментарии (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".
      Ответить
      • <?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.
          Ответить

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