Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析

Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析

1. 类变量与成员变量

类变量

类变量是定义在类中但在所有实例之间共享的变量。它可以通过类名或实例访问,当一个实例修改了类变量的值时,该修改会影响到其他所有实例。在类的定义中,类变量通常位于类方法之外,且在所有实例之前初始化。

示例代码:

class Circle:
    # 类变量
    pi = 3.14

    def __init__(self, radius):
        # 成员变量
        self.radius = radius

    def calculate_area(self):
        # 计算面积
        return Circle.pi * self.radius ** 2

# 创建两个圆的实例
circle1 = Circle(5)
circle2 = Circle(10)

# 访问类变量
print(circle1.pi)  # 输出: 3.14
print(circle2.pi)  # 输出: 3.14

# 修改类变量
Circle.pi = 3.14159

# 对所有实例的类变量进行修改
print(circle1.pi)  # 输出: 3.14159
print(circle2.pi)  # 输出: 3.14159

成员变量

成员变量是定义在类方法中的变量,每个实例都有一份独立的成员变量。它们在每个实例中可以有不同的值,与其他实例互不影响。成员变量需要在构造方法(__init__)中进行初始化。

示例代码:

class Circle:
    pi = 3.14

    def __init__(self, radius):
        # 成员变量
        self.radius = radius

    def calculate_area(self):
        return Circle.pi * self.radius ** 2

# 创建两个圆的实例
circle1 = Circle(5)
circle2 = Circle(10)

# 访问成员变量
print(circle1.radius)  # 输出: 5
print(circle2.radius)  # 输出: 10

2. 类方法与成员方法

类方法

类方法是定义在类中的方法,通过类名调用且可以访问类变量,但无法访问实例变量。类方法使用@classmethod装饰器进行标识,第一个参数通常为cls表示类本身。类方法可以用于创建、修改或处理类级别的数据,比如在创建实例之前对类变量进行修改。

示例代码:

class Circle:
    pi = 3.14

    def __init__(self, radius):
        self.radius = radius

    @classmethod
    def change_pi(cls, new_pi):
        # 修改类变量
        cls.pi = new_pi

# 创建一个圆的实例
circle = Circle(5)

# 调用类方法修改类变量
Circle.change_pi(3.14159)

# 访问类变量
print(circle.pi)  # 输出: 3.14159

成员方法

成员方法是定义在类中的方法,通过实例调用,可以访问实例变量和类变量。成员方法的第一个参数通常为self,表示实例本身。成员方法用于对实例进行操作,可以读取或修改实例的属性。

示例代码:

class Circle:
    pi = 3.14

    def __init__(self, radius):
        self.radius = radius

    def calculate_area(self):
        # 计算面积
        return Circle.pi * self.radius ** 2

# 创建一个圆的实例
circle = Circle(5)

# 调用成员方法计算面积
area = circle.calculate_area()

# 打印结果
print(area)  # 输出: 78.5

以上就是关于Python面向对象程序设计中类变量与成员变量、类方法与成员方法的用法分析和示例说明。希望能对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析 - Python技术站

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

相关文章

  • html实现时间轴_纯css实现响应式竖着/垂直时间抽布局效果

    HTML实现时间轴-纯CSS实现响应式竖着/垂直时间线布局效果 时间轴是现代网站设计中非常流行的一种设计元素。在该设计元素中,一系列日期和事件以时间线的形式展示出来。在本文中,我们将讨论如何使用HTML和CSS实现一个响应式、垂直排列的时间轴布局。 HTML代码结构 为了实现时间轴布局,我们需要定义一些HTML元素,如 ul、li、p等。下面是时间轴布局HT…

    其他 2023年3月28日
    00
  • 浅谈MFC 改变控件大小和位置

    下面我将详细讲解 “浅谈MFC 改变控件大小和位置” 的完整攻略,包括以下几个步骤: 1. 确定控件ID 首先我们需要确定需要改变大小和位置的控件ID,在MFC中,每个控件都有一个独有的ID,可以在resource.h中进行设置或修改。具体方法如下: 在资源视图中打开对应的资源文件,找到需要改变大小和位置的控件,在右键菜单中选择“属性”项(或者直接双击该控件…

    other 2023年6月27日
    00
  • 详解vue2.0 transition 多个元素嵌套使用过渡

    详解Vue 2.0 Transition 多个元素嵌套使用过渡 在Vue 2.0中,过渡效果可以通过<transition>组件来实现。当我们需要在多个元素之间应用过渡效果时,可以使用嵌套的<transition>组件来实现。下面是一个完整的攻略,包含了两个示例说明。 示例一:淡入淡出效果 首先,我们需要在Vue实例中引入transi…

    other 2023年7月27日
    00
  • Android自定义View设定到FrameLayout布局中实现多组件显示的方法 分享

    下面是详细讲解“Android自定义View设定到FrameLayout布局中实现多组件显示的方法”的完整攻略: 1. 什么是自定义View 自定义View是指在Android中,通过继承View或是其子类,重写View的onDraw(),实现自己想要的绘制效果,以及对用户的交互事件进行处理。 2. 为什么要自定义View Android基础控件虽然已经非常…

    other 2023年6月27日
    00
  • 同时接入两条光纤进局域网两种解决方案

    同时接入两条光纤进局域网有两种解决方案,分别是跨VLAN和链路聚合。下面我将分别对这两种方案进行详细讲解,并给出相应的示例说明。 跨VLAN 跨VLAN是指将两个不同的VLAN通过一个交换机进行连接,从而实现两条光纤同时进入局域网的目的。该方案需要保证两个VLAN之间的互通,同时需要在交换机上进行相应的配置。 步骤 在交换机上创建两个VLAN,假设分别为VL…

    other 2023年6月26日
    00
  • 小米miui 6内测包下载地址 miui v6内测版官方下载地址

    小米MIUI 6内测包下载攻略 小米MIUI 6是小米公司推出的一款基于Android操作系统的用户界面。内测版是在正式发布之前提供给用户测试和反馈的版本。本攻略将详细介绍小米MIUI 6内测包的下载地址和安装步骤。 步骤一:访问官方网站 首先,您需要访问小米官方网站以获取MIUI 6内测包的下载地址。您可以在小米官方网站的下载页面找到相关的链接。 示例说明…

    other 2023年8月5日
    00
  • vivo手机内存不够怎么办 快应用功能轻松解决手机内存不足问题

    vivo手机内存不够怎么办 快应用功能轻松解决手机内存不足问题攻略 1. 了解快应用功能 快应用是一种轻量级应用,可以在不安装的情况下直接运行在手机上。它们占用的内存较少,不会占用手机的存储空间。因此,使用快应用功能可以帮助解决手机内存不足的问题。 2. 下载和安装快应用 要使用快应用功能,首先需要下载和安装快应用。请按照以下步骤进行操作: 打开vivo手机…

    other 2023年8月2日
    00
  • 微信小程序文章详情页面实现代码

    article: {} }, onLoad: function(options) { // 从上一个页面获取文章数据 const articleData = options.articleData; // 将文章数据保存到data中 this.setData({ article: articleData }); }}); ## 步骤五:跳转到文章详情页面 在…

    other 2023年9月7日
    00
合作推广
合作推广
分享本页
返回顶部