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

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实现读写锁的示例代码”的完整攻略进行详细讲解。 什么是读写锁? 在多线程编程中,我们通常需要对共享资源进行保护,以避免多个线程同时访问并修改同一份数据,导致数据出错或产生副作用。而读写锁(ReadWrite Lock)就是其中一种解决方案,它可以在语义上将对资源的访问分为读操作和写操作两类,同时对读操作和写操作分别进行锁定,以避免…

    python 2023年6月6日
    00
  • 聊聊python 逻辑运算及奇怪的返回值(not,and,or)问题

    聊聊Python逻辑运算及奇怪的返回值问题 在Python中,逻辑运算符包括not、and和or。这些运算符用于组合和比较布尔。在使用这些运算符时,有会遇到一些奇怪的返回值问题。本文将详细讲解Python中逻辑运算奇怪的返回值问题,并提供两个示例如下: 逻辑运算符 not运算符 not运算符用于对布尔值进行取反操作。如果一个布尔值为,则not运算符将其转换为…

    python 2023年5月13日
    00
  • 详解Python设计模式之策略模式

    详解Python设计模式之策略模式 策略模式是什么 策略模式(Strategy Pattern)是一种行为模式,用于以相同的方式处理多个不同的行为。在策略模式中,算法被封装在独立的策略中,这使得它们易于替换、理解和扩展。此模式通过定义算法族、分别封装它们,使它们之间可以互换,此模式让算法的变化独立于使用算法的客户。 以计算器为例,有加法、减法、乘法、除法等操…

    python 2023年6月3日
    00
  • Python 实现大整数乘法算法的示例代码

    下面是详细讲解“Python实现大整数乘法算法的示例代码”的完整攻略,包括算法原理、Python实现和两个示例说明。 算法原理 大数乘法算法是指对于两大整数,采用分治法的思想,将其分别拆分成高位和低位两部分,然后递归地计算出们的乘积,最后将结果合并得到最终的乘积。具体步骤如下: 将两个大整数分别拆成高位和低位两部分; 递归地计算出高位和低位的乘积; 将高位和…

    python 2023年5月14日
    00
  • Python开源自动化工具Playwright安装及介绍使用

    Python开源自动化工具Playwright是一个功能强大、易于使用的自动化测试工具。它允许开发人员使用Python编写端到端测试,并且可以与多种浏览器和操作系统进行交互。 以下是完整的攻略步骤: 1. 安装Playwright 安装Playwright需要使用pip命令: pip install playwright 此外,还需要在本地安装要进行自动化测…

    python 2023年5月19日
    00
  • 给大家整理了19个pythonic的编程习惯(小结)

    当我们使用Python进行编程时,有一些编程习惯可以帮助我们编写出更加规范、易读、易维护的Python代码。这些习惯被称为“Pythonic”的编程习惯。下面就给大家整理了19个Pythonic的编程习惯。 1. 了解并使用Python标准库 Python标准库是Python内置的一组模块和函数库,它包含了很多实用的工具和功能。使用Python标准库有助于减…

    python 2023年5月13日
    00
  • Python3.6安装及引入Requests库的实现方法

    下面是“Python3.6安装及引入Requests库的实现方法”的完整攻略。 安装Python3.6 前往 Python官网 下载Python3.6的安装包,选择适合你操作系统的版本。 双击运行安装包,选择“Add Python to PATH”选项并确保安装路径无误,然后点击“Install Now”按钮。 等待安装完成,可以在命令行输入python命令…

    python 2023年5月14日
    00
  • python解析yaml文件过程详解

    YAML是一种轻量级的数据序列化格式,常用于配置文件和数据交换。Python提供了多种解析YAML文件的方法,包括PyYAML和ruamel.yaml等。以下是详细讲解Python解析YAML文件过程的攻略,包含两个示例。 示例1:使用PyYAML解析YAML文件 以下是一个示例,可以使用PyYAML解析YAML文件: import yaml # 读取YAM…

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