[ Avaa Bypassed ]




Upload:

Command:

hmhc3928@3.145.165.239: ~ $
�
V
�Qc@s�dZddlmZmZmZdefd��YZdefd��YZdefd��YZed	d
i�Zd
�Z	e
dkr�e	�ndS(s�Support Eiffel-style preconditions and postconditions.

For example,

class C:
    def m1(self, arg):
        require arg > 0
        return whatever
        ensure Result > arg

can be written (clumsily, I agree) as:

class C(Eiffel):
    def m1(self, arg):
        return whatever
    def m1_pre(self, arg):
        assert arg > 0
    def m1_post(self, Result, arg):
        assert Result > arg

Pre- and post-conditions for a method, being implemented as methods
themselves, are inherited independently from the method.  This gives
much of the same effect of Eiffel, where pre- and post-conditions are
inherited when a method is overridden by a derived class.  However,
when a derived class in Python needs to extend a pre- or
post-condition, it must manually merge the base class' pre- or
post-condition with that defined in the derived class', for example:

class D(C):
    def m1(self, arg):
        return arg**2
    def m1_post(self, Result, arg):
        C.m1_post(self, Result, arg)
        assert Result < 100

This gives derived classes more freedom but also more responsibility
than in Eiffel, where the compiler automatically takes care of this.

In Eiffel, pre-conditions combine using contravariance, meaning a
derived class can only make a pre-condition weaker; in Python, this is
up to the derived class.  For example, a derived class that takes away
the requirement that arg > 0 could write:

    def m1_pre(self, arg):
        pass

but one could equally write a derived class that makes a stronger
requirement:

    def m1_pre(self, arg):
        require arg > 50

It would be easy to modify the classes shown here so that pre- and
post-conditions can be disabled (separately, on a per-class basis).

A different design would have the pre- or post-condition testing
functions return true for success and false for failure.  This would
make it possible to implement automatic combination of inherited
and new pre-/post-conditions.  All this is left as an exercise to the
reader.

i����(t	MetaClasst
MetaHelpertMetaMethodWrappertEiffelMethodWrappercBseZd�Zd�ZRS(cCs�tj|||�yt||jd�|_Wntk
rLd|_nXyt||jd�|_Wntk
r�d|_nXdS(Nt_pret_post(Rt__init__tgetattrt__name__tpretAttributeErrortNonetpost(tselftfunctinst((s//usr/lib64/python2.7/Demo/metaclasses/Eiffel.pyRDs


cOsh|jrt|j||�nt|j|jf||�}|jrdt|j|f||�n|S(N(R	tapplyRRR(R
targstkwtResult((s//usr/lib64/python2.7/Demo/metaclasses/Eiffel.pyt__call__Ss		(Rt
__module__RR(((s//usr/lib64/python2.7/Demo/metaclasses/Eiffel.pyRBs	tEiffelHelpercBseZeZRS((RRRt__methodwrapper__(((s//usr/lib64/python2.7/Demo/metaclasses/Eiffel.pyR[stEiffelMetaClasscBseZeZRS((RRRt
__helper__(((s//usr/lib64/python2.7/Demo/metaclasses/Eiffel.pyR^stEiffelcCs0dtfd��Y}|�}|jd�dS(NtCcBs#eZd�Zd�Zd�ZRS(cSs|dS(Ni((R
targ((s//usr/lib64/python2.7/Demo/metaclasses/Eiffel.pytm1fscSsdS(N((R
R((s//usr/lib64/python2.7/Demo/metaclasses/Eiffel.pytm1_prehscSsdS(N((R
RR((s//usr/lib64/python2.7/Demo/metaclasses/Eiffel.pytm1_postjs(RRRRR(((s//usr/lib64/python2.7/Demo/metaclasses/Eiffel.pyRes		i(RR(Rtx((s//usr/lib64/python2.7/Demo/metaclasses/Eiffel.pyt_testds	t__main__N((t__doc__tMetaRRRRRRRR!R(((s//usr/lib64/python2.7/Demo/metaclasses/Eiffel.pyt<module>>s	

Filemanager

Name Type Size Permission Actions
.Enum.pyo.40009 File 6.03 KB 0644
.Meta.pyo.40009 File 4.47 KB 0644
.Simple.pyo.40009 File 2.68 KB 0644
.Trace.pyo.40009 File 6.03 KB 0644
Eiffel.py File 3.39 KB 0644
Eiffel.pyc File 4.52 KB 0644
Eiffel.pyo File 4.42 KB 0644
Enum.py File 4.32 KB 0644
Enum.pyc File 6.03 KB 0644
Enum.pyo File 6.03 KB 0644
Meta.py File 2.86 KB 0644
Meta.pyc File 4.47 KB 0644
Meta.pyo File 4.47 KB 0644
Simple.py File 1.16 KB 0644
Simple.pyc File 2.68 KB 0644
Simple.pyo File 2.68 KB 0644
Synch.py File 7.75 KB 0644
Synch.pyc File 8.26 KB 0644
Synch.pyo File 8.12 KB 0644
Trace.py File 4.04 KB 0644
Trace.pyc File 6.03 KB 0644
Trace.pyo File 6.03 KB 0644
index.html File 20.09 KB 0644
meta-vladimir.txt File 11.26 KB 0644