Python 类属性与实例属性,类对象与实例对象用法分析

yizhihongxing

Python 类属性与实例属性,类对象与实例对象用法分析

在Python中,类和实例都有属性这个概念,属性可以是类属性或实例属性。类属性属于类对象,实例属性属于实例对象。在使用类和实例时,对属性的理解和应用是很重要的。本文将详细讲解Python类属性与实例属性、类对象与实例对象的用法及应用。

定义类

我们首先要学习的是如何定义类。在Python中,使用class关键字定义一个类。类名通常采用Pascal命名法(单词首字母大写),而且通常没有括号。接下来我们来定义一个最基本的类Person,类中只有一个属性name

class Person:
    name = "Default Name"

类属性和实例属性

在上面的定义中,我们定义了一个类属性name,它属于整个类,如果不对它进行修改,所有实例的name都是"Default Name"

接下来,让我们创建一个实例对象。

p = Person()

我们可以通过.来访问对象的属性和方法,这里我们可以通过p.name来访问类属性name

print(p.name)  # 输出 "Default Name"

如果我们想改变实例的name属性,我们可以通过=赋值来实现。

p.name = "Tom"
print(p.name)  # 输出 "Tom"

现在实例对象pname属性已经变为了"Tom",但是类属性name的值并没有变化,其值仍为"Default Name"

print(Person.name)  # 输出 "Default Name"

在Python中,实例属性优先于类属性,这就是为什么实例对象pname属性已经被改变,但类属性name并没有改变。

当我们访问实例属性时,Python会现在实例对象p中查找是否存在该属性,如果没有找到,则在类属性中查找,如果还是没有找到,则会抛出AttributeError异常。

p.age  # 抛出 AttributeError

类对象和实例对象

在Python中,类也是一个对象,它是type类的实例对象。而我们通过class关键字定义的类就是类对象。我们可以在类对象中定义类属性和方法。

class Person:
    name = "Default Name"

    @staticmethod
    def say_hello():
        print("Hello!")

我们可以通过.来访问类对象的属性和方法,这里我们可以通过Person.name来访问类属性name,通过Person.say_hello()来访问静态方法。

print(Person.name)  # 输出 "Default Name"
Person.say_hello()  # 输出 "Hello!"

我们也可以通过类对象来创建实例对象。

p1 = Person()
p2 = Person()

p1和p2都是Person类的实例对象,它们可以访问类属性和方法,也可以定义自己的实例属性。

print(p1.name)  # 输出 "Default Name"
p1.name = "Tom"
print(p1.name)  # 输出 "Tom"
print(p2.name)  # 输出 "Default Name"

p1.say_hello()  # 输出 "Hello!"
p1.age = 20
p2.age = 30

print(p1.age, p2.age)  # 输出 20 30

示例1: 计数器

下面我们来看一个示例,学习如何使用类和实例属性来实现计数器。

class Counter:
    count = 0

    def __init__(self):
        self.__class__.count += 1

c1 = Counter()
c2 = Counter()
c3 = Counter()

print(c1.count)  # 输出 3

这里我们定义一个类Counter,类属性count初始化为0。每当创建一个实例对象时,我们就将类属性count加1。然后我们分别创建了3个Counter类的实例对象,然后通过c1.count来访问类属性count,输出的值为3,表示我们创建了3个实例对象。

示例2: 标准差

下面我们来看一个更加复杂的示例,学习如何使用类和实例属性来计算一组数的标准差。

class StandardDeviation:
    total = 0
    squares = 0
    count = 0

    def __init__(self, value):
        self.value = value
        self.__class__.total += value
        self.__class__.squares += value ** 2
        self.__class__.count += 1

    def variance(self):
        if self.__class__.count == 0:
            return 0
        return (self.__class__.squares / self.__class__.count) - \
            (self.__class__.total / self.__class__.count) ** 2

    def std_dev(self):
        return self.variance() ** 0.5

sd = StandardDeviation(1)
sd = StandardDeviation(2)
sd = StandardDeviation(3)
sd = StandardDeviation(4)
sd = StandardDeviation(5)

print(sd.std_dev())  # 输出 1.4142135623730951

这里我们定义了一个类StandardDeviation,类属性totalsquarescount分别用来记录总数、平方和、元素个数。在__init__方法中,我们将实例属性value加入到totalsquares中,同时将count加1。在variance方法中,我们计算每个元素的方差,std_dev方法则是计算标准差。

我们分别创建了5个实例对象,并将它们加入到StandardDeviation这个类的对象中。最终我们计算出了这组数的标准差,输出的值是1.4142135623730951

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

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • python列表数据增加和删除的具体实例

    以下是“Python列表数据增加和删除的具体实例”的完整攻略。 1. 列表数据增加 在Python中,可以使用append()方法将添加到列表中。示例如下: my_list = [1, 2, 3] my_list.append(4) print(my_list) 在面的示例代码中,我们首先定义了一个名为my_list列表,其中包含了三个元素。然后,使用app…

    python 2023年5月13日
    00
  • 一文带你掌握Pyecharts地理数据可视化的方法

    一文带你掌握 Pyecharts 地理数据可视化的方法 介绍 本文将为大家介绍如何使用 Pyecharts 实现地理数据可视化,帮助大家更好地掌握该库的使用方法。 前置知识 在学习本文之前,你需要掌握 Python 的基础知识,并且对 Pyecharts 库有一定的了解。如果你还没有掌握 Pyecharts 基本操作,可以先参考官方文档:Pyecharts …

    python 2023年6月3日
    00
  • Python多线程实现支付模拟请求过程解析

    Python多线程实现支付模拟请求过程解析 在Python中,我们可以使用多线程来实现并发。本文将介绍如何使用Python多线程实现支付模拟请求过程,并提供两个示例代码。 步骤1:导入必要的库 在使用多线程实现支付模拟请求之前,我们需要先导入必要的库: import threading import requests import time 在上面的示例中,…

    python 2023年5月15日
    00
  • Python大数据之使用lxml库解析html网页文件示例

    Python大数据之使用lxml库解析HTML网页文件示例 在本文中,我们将介绍如何使用Python的lxml库解析HTML网页文件。我们将介绍lxml库的基本用法,包括如何使用XPath表达式和CSS选择器来查找和提取网页中的元素。我们还将提供两个示例,以帮助读者更好地理解lxml库的。 步骤1:安装必要的库 在使用Python的lxml库解析HTML网页…

    python 2023年5月15日
    00
  • Python计算两个日期相差天数的方法示例

    下面是关于“Python计算两个日期相差天数的方法示例”的完整攻略。 标题 需求背景 在日常开发中,经常会遇到需要计算两个日期之间相差的天数的需求。Python中,通过date或datetime模块就能方便地实现这个功能。 方法说明 Python中计算两个日期相差天数的方法,原理是通过datetime模块的timedelta类计算两个日期之间的时间差,时间差…

    python 2023年6月3日
    00
  • Python实现的科学计算器功能示例

    下面是“Python实现的科学计算器功能示例”的完整攻略。 Python实现的科学计算器功能示例 什么是科学计算器 科学计算器是一种能够进行科学计算的计算器,它能够支持诸如三角函数、对数函数、指数函数、复数运算等高级运算。同时,科学计算器还具有括号功能、历史记录、计算器模式选择等实用的功能。 设计思路 本示例的科学计算器将采用Python语言实现。主要思路是…

    python 2023年6月3日
    00
  • Python正则表达式匹配ip地址实例

    以下是“Python正则表达式匹配IP地址实例”的完整攻略: 一、问题描述 在Python中,我们可以使用正则表达式来匹配IP地址。本文将详细讲解Python正则表达式匹配IP地址的方法,以及如何在实际开发中应用。 二、解决方案 2.1 IP地址的正则表达式 IP地址是由四个数字组成,每个数字的取值范围是0-255,数字之间用“.”分隔。因此,我们可以使用正…

    python 2023年5月14日
    00
  • Python数据类型之列表和元组的方法实例详解

    Python数据类型之列表和元组的方法实例详解 在Python中,列表和元组是两种常用的数据类型。本攻略将详细介绍列表和元组的方法,包括如何创建列表和元组、如何访问列表和元组中的元素、如何修改列表和元组、如何添加和删除列表和元组中的元素等。 列表 创建列表 在Python中,列表可以通过方括号[]来创建。以下是一个示例代码,演示如何创建一个列表: # 创建一…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部