python类和实例的一些属性

1.self和__init__()

self代表类的实例,如下:

    class Test:
        a,b='classa','classb'#类的属性
        def __init__(self):
            self.b='selfb'#实例的属性
            self.c='selfc'
    print(Test.a)
    print(Test.b)
    #-output:classa classb-访问类的属性
    a=Test()
    print(a.a)
    #-output:classa-通过实例访问类的属性
    print(a.b)
    #-output:selfb-当实例和类都具有某属性时,输出实例属性
    print(a.c)
    print(Test.c)
    #output

当实例和类有相同的属性时,如何通过实例访问类的属性呢?
可以通过__class__访问

2.class

__class__是指实例所对应的类

    # -*- coding: utf-8 -*-
    class Test:
        a='classa'
        print(count)
        def __init__(self):
            self.a='selfa'
            print(self)
            #-output:<__main__.Test object at 0x055A1270>
            print(self.__class__)
            #-output:<class '__main__.Test'>
    a=Test()
    print('实例a',a)
    #-output:<__main__.Test object at 0x055A1270>
    print('类Test',Test)
    #-output:<class '__main__.Test'>
    print(a.a,a.__class__.a)
    #-output:selfa classa

通过__init__()可以实现对类的实例的统计

    # -*- coding: utf-8 -*-
    class Test(object):
        count=0
        def __init__(self):
            super(Test, self).__init__()
            self.__class__.count+=1
    if __name__=="__main__":
        a=Test()
        print(Test.count)
        b=Test()
        print(Test.count)
        Test()
        print(Test.count)

输出为

1
2
3

每创建一个Test类的实例,Test.count都加1

3.dict

__dict__是一个字典,键是属性名,值为属性值。
类有自己的__dict__,类的实例也有自己的__dict__

    # -*- coding: utf-8 -*-
    class Test(object):
        classa='classa'
        def __init__(self):
            super(Test, self).__init__()
            self.selfb='selfb'
    if __name__=="__main__":
        print(Test.__dict__)
        a=Test()
        print(a.__dict__)

输出为

{'__module__': '__main__', 'classa': 'classa', '__init__': <function Test.__init__ at 0x04D03468>, '__dict__': <attribute '__dict__' of 'Test' objects>, '__weakref__': <attribute '__weakref__' of 'Test' objects>, '__doc__': None}
{'selfb': 'selfb'}

可见类Test有classa属性以及一些其他属性
类Test的实例a只有self.b属性

4.len(self)函数

返回元素个数,实现len()方法。即类实现了__len__()函数就可以使用len()函数

5.getitem(self,key)

实现字典一样的功能,当类的实例对象(假设为P)调用P[key]时,调用此函数返回。

参考资料

1,https://docs.python.org