• 类属性、实例属性


    类属性

    class people:
        name = 'Tom'  #公有的类属性
        __age = 12     #私有的类属性
    
    p = people()
    
    print p.name             #正确
    print people.name        #正确
    print p.__age            #错误,不能在类外通过实例对象访问私有的类属性
    print people.__age       #错误,不能在类外通过类对象访问私有的类属性
    

    实例属性

    实例属性是不需要在类中显示定义的,比如

    class people:
        name = 'Tom'
    
    p = people()
    p.age =12
    print p.name    #正确
    print p.age     #正确
    
    print people.name    #正确
    print people.age     #错误
    

     在类外对类对象people进行实例化之后,产生了一个实例对象p,然后p.age = 12这句给p添加了一个实例属性age,赋值为12。这个实例属性是实例对象p所特有的,注意,类对象people并不拥有它(所以不能通过类对象来访问这个age属性)。当然还可以在实例化对象的时候给age赋值。

    class people:
        name = 'Tom'
    
        #__init__()是内置的构造方法,在实例化对象时自动调用
        def __init__(self,age):
            self.age = age
    
    p = people(12)
    print p.name    #正确
    print p.age     #正确
    
    print people.name    #正确
    print people.age     #错误
    

     如果需要在类外修改类属性,必须通过类对象去引用然后进行修改。如果通过实例对象去引用,会产生一个同名的实例属性,这种方式修改的是实例属性,不会影响到类属性,并且之后如果通过实例对象去引用该名称的属性,实例属性会强制屏蔽掉类属性,即引用的是实例属性,除非删除了该实例属性

    class people:
        country = 'china'
    
    print people.country
    p = people()
    print p.country
    p.country = 'japan' 
    print p.country      #实例属性会屏蔽掉同名的类属性
    print people.country
    del p.country    #删除实例属性
    print p.country
    

     运行结果:

    china
    
    china
    
    japan
    
    china
    
    china
    
  • 相关阅读:
    http
    jquery
    wsgi
    urls控制器
    模板template
    ORM
    C++中获取汉字拼音首字缩写/全拼及生僻字的处理
    C语言函数strstr
    CString 成员函数用法
    判断字符串中是否存在中文
  • 原文地址:https://www.cnblogs.com/loaderman/p/6561864.html
Copyright © 2020-2023  润新知