Method ====== Snippets about method. method 101 ---------- Instancemethods take ``self`` argument, classmethods take ``cls`` argument, staticmethods take no magic argument(not very useful). :: class FancyDict(dict): @classmethod def fromkeys(cls, keys, value=None): data = [(key, value) for key in keys] return cls(data) :: >>> FancyDict(key1='value1', key2='value2', key3='value3') {'key3': 'value3', 'key2': 'value2', 'key1': 'value1'} >>> FancyDict.fromkeys(['key1', 'key2'], 'value') {'key2': 'value', 'key1': 'value'} We are gonna talk a little more about classes, ``__slots__``, you can use it to omit dict of python instances and reduce memory use in the end:: class Tiny(object): __slots__ = ['value'] def __init__(self, value): self.value = value t = Tiny(1) :: >>> t.value 1 >>> t.value2 = 2 Traceback (most recent call last): File "", line 1, in AttributeError: 'Tiny' object has no attribute 'value2' Then talk a little about ``__new__``, this is the actual constructor method of one instance, and it is one static method:: class WrappingInt(int): __slots__ = [] def __new__(cls, value): value = value % 255 self = int.__new__(cls, value) return self wrapping_int = WrappingInt(256) :: >>> wrapping_int 1