• python基础-类的属性(类属性,实例属性,私有属性)


     

    一:类的属性

      类的属性分为:类属性(公有属性),实例属性和私有属性。

    1)类属性(公有属性(静态字段):

      类定义时直接指定的属性(不是在__init__方法中),可以通过类名直接访问属性,并且保存在类的内存中,如果一个属性都有共同值就可以设置为公有属性。

    2)实例属性:

      在__init__方法中添加的属性,就是实例属性。实例属性保存在对象的内存中。

    3)私有属性:

      在__init__方法中定义,并且前面有两个__的属性:比如self.__heart="Normal" 这个就是私有属性,对外不可见,对内可见。  

      1.如果想外面看见私有属性,可以通过下面方法: 

        外面可以看见私有属性,但不能修改
          def get_heart(self): #对外提供可读属性
            return self.__heart

      2.可以强制访问类的私有属性。方式:实例名._类名__私有属性 例:r1._role__heart

    4)示例代码1:

    # -*- coding:utf-8 -*-
    __author__ = 'shisanjun'
    
    class Person(object):
    
        country="中国"#类的公有属性或者类属性
    
        def __init__(self,name,age):
            self.name=name #实例属性
            self.age=age
            self.__salary="15000" #私有属性
    
        def talk(self):
            print("国家:%s,名称为:%s,年龄为:%s,薪水:%s" %(self.country,self.name,self.age,self.__salary))
    
        #提供私有属性访问接口
        def get_salary(self):
            return self.__salary
    
    p=Person("shi",23)
    p.talk()
    
    #访问类属性
    print(Person.country)
    
    #实例属性
    print(p.name)
    
    #直接访问类的私有属性会报错
    #print(p.__salary)
    
    #强制访问私有属性
    print(p._Person__salary)
    
    
    #私有属性访问2:
    print(p.get_salary())
    
    """
    结果
    国家:中国,名称为:shi,年龄为:23,薪水:15000
    中国
    shi
    15000
    15000
    """

     示例代码2:

    class Foo(object):
        country="中国“
        def __init__(self,name,count)
            self.name=name
            self.count=count
    
        def bar(self):
            pass
    
    obj1=Foo("江苏")
    obj1.bar()
    
    obj2=Foo(“山东”)
    obj2.bar
    
    如果country="中国"放置在__init__中,每次实例化对象的时候country="中国“都会在内存中占用一块。而放在公有属性只占用一块。
    
    解释器从上到下解释,先发现类,在内存中创建这个类,这个内存就存在这个方法。
    
    obj1,obj2维护着和类的指针
    执行obj1把自己传输进来 
    
    公有属性(静态字段),只保存类中一份。如果一个属性都有共同值就可以设置为公有属性。
    私有属性,是保存在对象中,可以是多份

     5)内存演示1

     

      5)公有属性内存演示2

  • 相关阅读:
    IIS发布问题解决
    创建Core项目使用IdentityServer4
    通过数据库名称字符串 反射获取数据并刷新对应缓存
    MVC模式下unity配置,报错“No connection string named '**Context' could be found in the application config file”
    Docker巨轮的航行之路-基础知识篇
    C#之LINQ
    Js调试中不得不知的Console
    jQuery中是事件绑定方式--on、bind、live、delegate
    前端常用技术概述--Less、typescript与webpack
    ES6学习之变量的解构赋值
  • 原文地址:https://www.cnblogs.com/lixiang1013/p/6918261.html
Copyright © 2020-2023  润新知