In [2]:
lambda_add = lambda x, y: x + y
lambda_add(1,3)


Out[2]:
4

In [8]:
class Word(str):
    def __new__(cls, word):
        # 注意我们必须要用到__new__方法,因为str是不可变类型
        # 所以我们必须在创建的时候将它初始化
        if ' ' in word:
            print("Value contains spaces. Truncating to first space.")
            word = word[:word.index(' ')] #单词是第一个空格之前的所有字符
        return str.__new__(cls, word)

    def __gt__(self, other):
        return len(self) > len(other)
    def __lt__(self, other):
        return len(self) < len(other)
    def __ge__(self, other):
        return len(self) >= len(other)
    def __le__(self, other):
        return len(self) <= len(other)

Word('bar') == Word('foo')


Out[8]:
False

In [16]:
class AccessCounter:
    '''一个包含计数器的控制权限的类每当值被改变时计数器会加一'''

    def __init__(self, val):
        super(AccessCounter, self).__setattr__('counter', 0)
        super(AccessCounter, self).__setattr__('value', val)

    def __setattr__(self, name, value):
        if name == 'value':
            super(AccessCounter, self).__setattr__('counter', self.counter + 1)
    #如果你不想让其他属性被访问的话,那么可以抛出 AttributeError(name) 异常
        super(AccessCounter, self).__setattr__(name, value)

    def __delattr__(self, name):
        if name == 'value':
            super(AccessCounter, self).__setattr__('counter', self.counter + 1)
        super(AccessCounter, self).__delattr__(name)

        
obj = AccessCounter(10)
obj.__setattr__('value', 11)
obj.__delattr__('value2')


---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-16-fdb7faaf9b7f> in <module>()
     20 obj = AccessCounter(10)
     21 obj.__setattr__('value', 11)
---> 22 obj.__delattr__('value2')

<ipython-input-16-fdb7faaf9b7f> in __delattr__(self, name)
     15         if name == 'value':
     16             super(AccessCounter, self).__setattr__('counter', self.counter + 1)
---> 17         super(AccessCounter, self).__delattr__(name)
     18 
     19 

AttributeError: value2

In [ ]: