Я изобрел новый стиль программирования
2008-01-06 07:38Я изобрел новый стиль программирования, спасающий от досадных ошибок. Это не XP и не структурное программирование, не заимствование и даже не ООП и не компонентная модель. Это - метод пьяной обезьяны. Посмотрите на эти наикривейшие исходники. Как вы думаете, будет это говно работать? Хо-хо! Вот и не угадали! Это жуткое говно работает:
python -i fuzzyobject_sample.py Vasya 1 Petya 2 Kolya 3 >>>
А все благодаря волшебному супер-пупер классику. Теперь можно сколько угодно лажаться в именах методов и переменных класса, код будет работать.
Моя мысль думает как расправиться с неправильным написанием имени класса или функции, равно как и свободных переменных. Но первый опыт довольно неплох.
Продукт
| Название: | |
| pd.lib | |
| Выложен на PyPI | |
| Репозиторий |
Пример программы в стиле пъяной обезъяны
### -*- 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




