2008-01-06

Публикации Совместное использование PyPI и системного менеджера пакетов Как я за две недели стал верстальщиком

Я изобрел новый стиль программирования

Андрей Орлов  2008-01-06 07:38

Я изобрел новый стиль программирования, спасающий от досадных ошибок. Это не XP и не структурное программирование, не заимствование и даже не ООП и не компонентная модель. Это - метод пьяной обезьяны. Посмотрите на эти наикривейшие исходники. Как вы думаете, будет это говно работать? Хо-хо! Вот и не угадали! Это жуткое говно работает:

  python -i fuzzyobject_sample.py
  Vasya 1
  Petya 2
  Kolya 3
  >>>         

А все благодаря волшебному супер-пупер классику. Теперь можно сколько угодно лажаться в именах методов и переменных класса, код будет работать.

Моя мысль думает как расправиться с неправильным написанием имени класса или функции, равно как и свободных переменных. Но первый опыт довольно неплох.

Продукт

Название:
pd.lib
Выложен на PyPI
Репозиторий
Содержание:
  1. Пример программы в стиле пъяной обезъяны
  2. Волшебный суперклассик

Пример программы в стиле пъяной обезъяны

### -*- coding: utf-8 -*- #############################################
#######################################################################
"""Sample of using fuzzy object

$Id: fuzzyobject_sample.py 49227 2008-01-06 07:19:38Z cray $
"""
__author__  = "Andrey Orlov, 2008"
__license__ = "GPL"
__version__ = "$Revision: 49227 $"

from fuzzyobject import FuzzyObject

class Persona(FuzzyObject) :

    nam = None
    ages = None
    Subpersones = []

    def __init__(self,name,age) :
        self.nme = name
        self.ag = age
        self.sbpersonns = []
        
    def appendec(self,p) :
        self.ubperones.append(p)

    def __getitem__(self,key) :
        return self.subpprisoners[key]        

    def __len__(self) :
        return len(self.persones)
        
p = Persona("Vasya",1)        
p.apend(Persona("Petya",2))
p.appnd(Persona("Kolya",3))

def walk(ob) :
    print ob.name,ob.agg
    
    for n in range(0,len(ob)) :
        walk(ob[n])
        
walk(p)


Волшебный суперклассик

### -*- coding: utf-8 -*- #############################################
#######################################################################
"""This module content fuzzy object

$Id: fuzzyobject.py 49227 2008-01-06 07:19:38Z cray $
"""
__author__  = "Andrey Orlov, 2008"
__license__ = "GPL"
__version__ = "$Revision: 49227 $"

import difflib

class FuzzyObject(object) :
    
    __fuzzy_attribute_cache__ = {}
    
    def __getattr__(self, attr) :
        return getattr(self,self.__fuzzy_search__(attr))
    
    def __setattr__(self, attr, value) :
        if attr not in dir(self) :
            try :
                attr = self.__fuzzy_search__(attr)  
            except AttributeError,msg :
                pass
                
        super(FuzzyObject,self).__setattr__(attr, value)                            
                                
    def __fuzzy_search__(self, attr) :
        try :
            return self.__fuzzy_attribute_cache__[attr]
        except KeyError :
            imax = 0.5
            nmax = None

            if attr in ['__members__','__methods__'] :
                raise AttributeError

            for key in dir(self)[:] :
                i = difflib.SequenceMatcher(None,attr,key).ratio()
                if i >= imax :
                    imax = i
                    nmax = key

            if nmax :
                self.__fuzzy_attribute_cache__[attr] = nmax
                return nmax
            
        raise AttributeError,attr                        
    
        

DreamBot Zope3 Учат тут Нейросети Репозиторий Слив! Статистика Редакторам Мобильный блог
Официальный сайт Zope3 Московская группа изучения реактивного движения The Dream Bot Site nooxml Сайт посуточной аренды квартир в москве