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计算n的阶乘的方法代码

    计算n的阶乘是Python中的基础问题之一,它可以用于数学、统计学以及算法中等多个领域。下面我将详细讲解计算n的阶乘的方法代码的完整攻略。 1. 阶乘的定义 首先,我们需要了解什么是阶乘。阶乘的定义如下: $n! = n \times (n-1) \times (n-2) \times …. \times 2 \times 1$ 其中,$n$为正整数。例…

    python 2023年6月3日
    00
  • 如何成为一名黑客全系列说明

    如何成为一名黑客全系列说明 什么是黑客 首先,我们需要明确一个概念:黑客并不等同于犯罪者。黑客通常是指善意的、有着高超计算机技能的计算机专家。他们的目的是弄清楚计算机系统的运作原理,以及如何安全、高效地运行。黑客的技术可以用来保护自己的网络安全,也可以用来测试软件的漏洞。那么,如何成为一名黑客呢? 学习编程语言 成为一名黑客的第一步,就是要学会编写代码。下面…

    python 2023年6月5日
    00
  • Python matplotlib可视化绘图详解

    Python matplotlib可视化绘图详解 介绍 Python 是一种非常流行的编程语言,拥有广泛的应用场景,其中之一就是用于数据分析和可视化。在数据可视化领域,Python 的一个常用库是 matplotlib。 matplotlib 是一个绘图库,能够提供各种类型的二维图形、三维图形以及动画效果,是 Python 语言中一款非常强大的数据可视化工具…

    python 2023年6月3日
    00
  • python os.system执行cmd指令代码详解

    当你需要在Python程序中执行外部操作系统命令时,可以使用Python标准库之一的os.system()函数来执行命令。本攻略将针对该函数进行详细讲解,并提供两个示例说明其用法。 1. Python os.system() 函数简介 os.system()函数可以在Python程序中执行任何由操作系统提供的可执行文件(如Windows的.exe、Unix/…

    python 2023年5月30日
    00
  • Python中变量的输入输出实例代码详解

    Python中变量输入输出实例代码详解 本文主要介绍Python中变量的输入输出实例代码,包括Python中的标准输入输出和文件的输入输出。 标准输入输出 输入变量 要在Python中输入变量,可以使用内置函数input()。函数参数作为提示信息在屏幕上输出,用户输入变量并按Enter结束输入。 示例代码: # 输入变量并输出 name = input(&q…

    python 2023年5月31日
    00
  • Python基础教程学习笔记 第二章 列表和元组

    Python基础教程学习笔记第二章列表和元组 本文将详细讲解Python基础教程第二章列表和元组的内容,包括列表和元组的定义、基本操作、高级操作等。 列表 列表是Python中最常用的数据类型之一,它是一个有序的、可变的序列,可以存储任意数量、任意类型的数据。列表使用方括号[]来表示,其中的元素逗号分隔。下面是一个简单的列表示例: my_list = [1,…

    python 2023年5月13日
    00
  • python使用itchat库实现微信机器人(好友聊天、群聊天)

    Python使用itchat库实现微信机器人(好友聊天、群聊天) 介绍 微信机器人是一种可以模拟人类逻辑回答用户发送的信息的程序。Python中使用itchat库实现微信机器人较为简单。itchat库是一个封装了微信Web版API的开源库,它可以帮助我们使用Python轻松地控制微信。 安装itchat库 在使用itchat库之前,需要先安装itchat库。…

    python 2023年5月23日
    00
  • python实现统计汉字/英文单词数的正则表达式

    以下是“Python实现统计汉字/英文单词数的正则表达式”的完整攻略: 一、问题描述 在Python中,我们可以使用正则表达式来统计汉字和英文单词的数量。本文将详细讲解Python实现统计汉字/英文单词数的正则表达式的方法,以及如何在实际开发中应用。 二、解决方案 2.1 统计汉字的数量 在Python中,统计汉字的数量可以使用正则表达式来实现。我们可以使用…

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