• 面向对象-05


    '''
    特殊成员:

    1.类名() 自动执行__init__方法
    def __init__(self, a1, a2):
    self.a1 = a1
    self.a2 = a2
    obj = Foo(1, 2)

    2.对象() 自动执行__call__方法
    def __call__(self, *arg, **kwargs):
    print(11111,args, kwargs)

    obj(6, 1, 2, k1 = 231)

    3.对象[] 自动执行__getitem__方法
    def __getitem__(self, item):
    print(item)
    return 23
    obj['yu'] #会打印出'yu',且返回23

    4.对象['xx'] = 11 自动执行__setitem__方法
    def __setitem__(self, key, value):
    print(key, value)

    obj['k1'] = 123 #结果为: k1 123 此方法相当于是用字典的方法进行传参,但生成的却不是字典.无返回值!

    5.del 对象[xx] 自动执行__delitem__方法
    def __delitem__(self, key):
    print(key)

    del obj['ww'] #结果为: ww.这么写他会自动给你把'ww'传进去.无返回值!

    6.对象+对象 自动执行__add__方法
    def __add__(self, other):
    return self.a1 + other.a1

    ret = obj1 + obj2 #对象之间当有add方法时,也可进行相加.且不仅支持加法,剪发乘法都可以.

    7.with 对象 #此方法像打开文件一样,打开一个对象.
    def __enter__(self): #enter可以有返回值
    print(123)
    return 999

    def __exit__(self, exc_type, exc_val, exc_tb):
    print(456)

    obj = Foo(1, 2)
    with obj:
    print('中间执行的代码')
    结果为: 123 中间执行代码 456
    #当遇到'with 对象',这种语句,系统会自动执行__enter__方法,然后退出时执行__exit__方法.当对象下有
    代码时,会在执行__exit__方法前,执行对象下的代码

    8.真正的构造方法
    class Foo(object):
    def __init__(self, a1, a2):
    print(123)

    # new方法是给当前类创建了一个空对象,而init方法则是给这个空对象添加属性.因此我们一般称new方法为'构造方法',init为'实例化方法'
    def __new__(cls, *args, **kwargs):
    print(456)
    return object.__new__(cls) #new方法必须有返回值,且返回值是固定的,其中cls表示当前类

    obj = Foo(1, 2) #创建对象时是先执行new方法的,new方法不执行,init方法是无法继续执行的,所以说要是我就不会写new方法.









    '''
  • 相关阅读:
    [UVa514] Rails
    今日才真正懂了BFS
    [UVa11292] Dragon of Loowater
    [UVa] TEX Quotes
    白书杂七杂八
    [OpenJudge] Feed_Accounting
    [OpenJudge] Jolly_Jumpers
    Restart
    Collection of Websites
    Oracle11完全卸载方法
  • 原文地址:https://www.cnblogs.com/gongteng/p/13567104.html
Copyright © 2020-2023  润新知