Python类属性与实例属性用法分析

Python类属性与实例属性用法分析

在 Python 中,类属性和实例属性是面向对象编程中常用的概念。他们有着不同的用法和作用,下面将详细讲解类属性与实例属性的用法分析。

1. 类属性

类属性是属于类的属性,它没有被任何实例化对象所共有,而是为类本身所有,并在定义类时声明。即使没有通过类实例化对象,该属性也可以直接通过类名来访问。

1.1 类属性的定义和访问

类属性的定义需要在类定义中进行,直接在类定义中定义一个变量即可,这个变量即为类属性。举个例子:

class Person:
    count = 0

以上代码定义了一个类 Person 并定义了一个类属性 count,初始值为 0

要访问类属性需要使用类名,语法如下:

类名.属性名

如:

Person.count

1.2. 类属性的方法内和方法外的访问方式

  • 方法内,使用 self.属性名 或者 类名.属性名
class Person:
    count = 0

    def __init__(self, name, age):
        self.name = name
        self.age = age
        Person.count += 1   #通过类名来访问类属性 count
        # self.count += 1   #通过 self 访问类属性 count,但不建议这么做

    def get_info(self):
        print(f'{self.name} is {self.age} years old.')

__init__ 方法内,使用 Person.count += 1 的方式来访问类属性 count,其实通过 self.count += 1 也是可以访问的,但这样并不推荐,因为这会使 count 变成一个实例属性。方法外部,同样可以用类名来访问类属性。

1.3. 应用场景

类属性的应用场景非常广泛,常被用于定义和表达类本身的特征,如类的名称、变量名称、实例数量等。如上面的例子中,类属性 count 定义了当前类 Person 的实例数量。

1.4. 示例

假设有一个学校,学校里有很多班级和学生,我们可以通过类属性来定义学校、班级和学生的数量,示例代码如下:

class School:
    name = '高新职业中专'
    class_count = 10     # 班级数量
    st_count = 300       # 学生数量

    def get_info(self):
        print(f'{School.name}共有{School.class_count}个班级和{School.st_count}名学生。')

school = School()
school.get_info()

以上代码定义了一个名为 School 的类,并定义了三个类属性分别包括学校名称、班级数量和学生数量。在 get_info 方法中,通过类名访问了这些类属性,最终输出了学校的信息。

2. 实例属性

与类属性不同,实例属性是属于类的实例化对象的,也就是说,每个实例化对象都有一份,互相之间并没有任何关联。实例属性必须在类的方法内被声明,并且是通过 self对象来实现声明,并通过 self. 对象来访问。

2.1. 实例属性的定义和访问

实例属性的定义只能在方法内进行声明,如:

class Person:
    def __init__(self, name, age):
        self.name = name  # 类的实例化对象拥有的实例属性 name ,赋值为调用传入的 name
        self.age = age    # 类的实例化对象拥有的实例属性 age,赋值为调用传入的 age

__init__ 方法中定义了两个实例属性 self.nameself.age,这两个实例属性只能在类的实例化对象中被使用。

在创建类的实例化对象时也仍旧需要使用类中定义的方法,并传入参数,像这样:

person_1 = Person('张三', 18)

创建 Person 类的实例化对象 person_1,并传入 nameage,这样实例化对象即拥有 nameage 两个实例属性。

2.2. 实例属性的方法内和方法外的访问方式

在方法内部,实例属性通过 self.属性名 来访问,比如:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def get_info(self):
        print(f'{self.name} is {self.age} years old.')

get_info 方法里,可以通过 self.nameself.age 来访问实例属性。

在类的外部,同样需要使用类的实例化对象来访问实例属性,例如:

person_1 = Person('张三', 18)
print(person_1.name, person_1.age)

在这个例子中,我们通过定义方法传入了两个参数 nameage,并且通过这两个参数来创建了一个实例化对象 person_1,最后通过访问这个实例化对象的 nameage 实例属性,来获取实例化对象的信息。

2.3. 应用场景

实例属性的应用场景非常广泛,相比较类属性而言,它更加灵活。实例属性可以根据具体的情况,为不同的实例化对象进行定制和设置专属的属性和方法,方便灵活,适用于强调灵活度的应用。

2.4. 示例

以下是一个汽车销售类的示例代码,其中汽车的名称、价格、款式都是实例属性:

class Car:
    def __init__(self, name, price, style):
        self.name = name
        self.price = price
        self.style = style

    def get_info(self):
        print(f'这辆汽车是{self.name},是一辆{self.style},价格是{self.price}元。')

car_1 = Car('奔驰S600', 800000, '豪华轿车')
car_1.get_info()  # 这辆汽车是奔驰S600,是一辆豪华轿车,价格是800000元。

总结

类属性和实例属性是 Python 中的重要概念,它们各自有不同的使用场景和使用方法,对于一个 Python 程序员而言,理解这两个概念尤为重要。在编写 Python 类的时候,我们可以根据具体场景来选择使用类属性还是实例属性,从而让我们的代码更加简洁、明了、灵活。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python类属性与实例属性用法分析 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • 云计算管理平台之OpenStack简介及基础环境搭建

    简单说openstack是云计算管理平台,主要对云环境中的虚拟机做增删查改;它能够将多台物理设备的资源(cpu/内存等)整合成一个大的资源池,然后根据openstack提供的api接口向用户提供使用;用户可以根据openstack提供的资源池接口来启动虚拟机,管理虚拟机;openstack 主要组成由控制节点和计算节点组成;其中控制节点由多个组件组成,每个组…

    云计算 2023年4月15日
    00
  • 『现学现忘』Docker相关概念 — 2、云计算的服务模式

    目录 1、最底层的,就是IaaS 2、再往上,就是PaaS 3、继续往上,就是SaaS 4、IaaS、SaaS、PaaS三者之间的关系 上一篇文章详细介绍了什么是云计算: 云是一种服务,可以像使用水、电、煤那样按需使用、灵活付费,使用者只需关注服务本身。 云计算的资源是动态扩展且虚拟化的,通过互联网提供,终端用户不需要了解云中基础设施的细节,不必具有专业的云…

    云计算 2023年4月11日
    00
  • 云计算技术解析 – 北纬三十度

    云计算技术解析  【1】核心功能 by 林玥煜、邓侃 前几天,有朋友与我讨论云计算的投资方向。他翻出 2009 年 Gartner 的 IT 行业分析报告 [1],说如果 Gartner 的判断是正确的,2009 年是云计算被炒作得最热的一年。从那以后的 2-5 年,即从 2011 年到 2014 年,云计算的热度将降低。水分被晾干以后,剩下的是干货,然后主…

    云计算 2023年4月13日
    00
  • Jquery ajax请求导出Excel表格的实现代码

    下面将为你详细讲解实现Jquery ajax请求导出Excel表格的完整攻略。 一、准备工作 实现Jquery ajax请求导出Excel表格,我们需要以下的工具、框架和库: Jquery框架 file-saver库 Blob对象 Excel文件模板 二、实现思路 通过ajax请求获取导出Excel的数据; 将数据格式转换成Excel文件的格式,这里我们需要…

    云计算 2023年5月17日
    00
  • 云计算平台(检索篇)-Elasticsearch-检索篇

             ES检索篇主要是对索引中的数据进行查询的一个过程: 1.IndexReader打开索引文件,读取并打开指向索引文件的流。 2.用户输入查询语句 3.将查询语句转换为查询对象Query对象树 4.构造Weight对象树,用于计算词的权重Term Weight,也即计算打分公式中与仅与搜索语句相关与文档无关的部分(红色部分)。 5.构造Scor…

    云计算 2023年4月10日
    00
  • ASP.NET Core配置和管理Web主机

    ASP.NET Core配置和管理Web主机是一个比较重要的话题。下面我来给你详细讲解一下这个攻略。 配置和管理Web主机的重要性 ASP.NET Core支持多种方式来托管运行ASP.NET Core应用程序的Web服务器,比如:- Internet Information Services(IIS)- Apache HTTP Server- Nginx-…

    云计算 2023年5月17日
    00
  • 云计算之后,雾计算开始

    吴韧认为,从这个意义讲, 也许所谓的“雾计算”(fog computing),是一个更加贴切的表述,意指由身边设备完成计算。他强调称,,云和雾是相辅相成, 云端无所不能,雾则无处不在,两者间的信息交换不是原始数据而是智能。 把任何数据都放入云端进行处理,需要非常大的带宽和存储支持和非常小的延时,很多情况下并非最优选择,甚至根本就无法做到。     雾计算(F…

    云计算 2023年4月10日
    00
  • 云栖直播《云计算时代的企业容灾体系及能力建设精讲》(下)PPT资料整理

    云栖直播《云计算时代的企业容灾体系及能力建设精讲》(下)PPT资料整理 非常荣幸,今年三月份受阿里云MVP团队邀请,在云栖直播平台和钉钉平台上做了两期直播节目,与阿里云MVP以及全国各地ACE开发者一起分享了我对云计算时代的企业容灾体系及能力建设的一些认识。做完节目之后,许多同学给了我很多意见和建议,让我受益良多,非常感谢大家的支持和鼓励!针对大家比较集中的…

    云计算 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部