î
e f# ã
@ s d Z d d l Z d d „ Z e e ƒ Z e d d „ ƒ Z e e j ƒ Z e e j ƒ Z e e j
ƒ Z d d „ Z e e ƒ ƒ Z
Gd d
„ d
ƒ Z e e ƒ j ƒ Z e e ƒ Z e g j ƒ Z e e ƒ Z y
e ‚ WnF e k
r"e j ƒ d Z e e ƒ Z e e j ƒ Z d Z [ Yn Xe e j ƒ Z e e j ƒ Z [ [ [ [ f d d d d
„ Z f d d d „ Z d d „ Z! Gd d „ d ƒ Z" d d „ e# ƒ Dƒ Z$ d S)zO
Define names for built-in types that aren't directly accessible as a builtin.
é Nc C s d S)N© r r r ú*/opt/alt/python34/lib64/python3.4/types.pyÚ_f s r c C s d S)Nr r r r r Ú
s r c c s d Vd S)Né r r r r r Ú_g s r c @ s e Z d Z d d „ Z d S)Ú_Cc C s d S)Nr )Úselfr r r Ú_m s z_C._mN)Ú__name__Ú
__module__Ú__qualname__r
r r r r r s r é c C sG t | | | ƒ \ } } } | d k r4 | | ƒ n | | | | | � S)zBCreate a class object dynamically using the appropriate metaclass.N)Ú
prepare_class)ÚnameÚbasesÚkwdsÚ exec_bodyÚmetaÚnsr r r Ú new_class/ s
r c C s¹ | d k r i } n t | ƒ } d | k r? | j d ƒ } n | rX t | d ƒ } n t } t | t ƒ r t | | ƒ } n t | d ƒ r¦ | j | | | � } n i } | | | f S)az Call the __prepare__ method of the appropriate metaclass.
Returns (metaclass, namespace, kwds) as a 3-tuple
*metaclass* is the appropriate metaclass
*namespace* is the prepared class namespace
*kwds* is an updated copy of the passed in kwds argument with any
'metaclass' entry removed. If no kwds argument is passed in, this will
be an empty dict.
NÚ metaclassr Ú__prepare__)ÚdictÚpopÚtypeÚ
isinstanceÚ_calculate_metaÚhasattrr )r r r r r r r r r 6 s r c C sc | } xV | D]N } t | ƒ } t | | ƒ r4 q
n t | | ƒ rO | } q
n t d ƒ ‚ q
W| S)z%Calculate the most derived metaclass.zxmetaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases)r Ú
issubclassÚ TypeError)r r ÚwinnerÚbaseÚ base_metar r r r V s
r c @ sy e Z d Z d Z d d d d d d „ Z d d d „ Z d d „ Z d d
„ Z d d „ Z d
d „ Z d d „ Z
d S)ÚDynamicClassAttributea Route attribute access on a class to __getattr__.
This is a descriptor, used to define attributes that act differently when
accessed through an instance and through a class. Instance access remains
normal, but access to an attribute through a class will be routed to the
class's __getattr__ method; this is done by raising AttributeError.
This allows one to have properties active on an instance, and have virtual
attributes on the class with the same name (see Enum for an example).
Nc C s[ | | _ | | _ | | _ | p' | j | _ | d k | _ t t | d d ƒ ƒ | _ d S)NÚ__isabstractmethod__F)ÚfgetÚfsetÚfdelÚ__doc__Ú
overwrite_docÚboolÚgetattrr% )r r&