Python中覆盖类属性最好的方法

ops/2024/9/23 3:25:40/

Python中有一个很独特的功能,类属性可为实例属性提供默认值。下面Person类中有一个名为current_year的类属性。compute_age方法中用到了这个属性,而且都故意使用self.current_year读取它的值。因为Person本身没有current_year这个实例属性,所以self.current_year默认获取的是Person.current_year类属性的值。

python">class Person:current_year = 2024def __init__(self, name: str, birth_year: int):self.name = nameself.birth_year = birth_yeardef compute_age(self):return self.current_year - self.birth_yearp = Person('cj', 2000)
age = p.compute_age()
print(age)  # 24

但是,如果为不存在的实例属性赋值,那么将创建一个新的实例属性,接上例:

python">p.sex = 'woman'
print(p.sex) # 新的实例属性sex,输出woman

假如为current_year实例属性赋值,那么同名类属性不会受到影响。然而一旦这么做,实例读取的self.current_year是实例属性current_year,也就是把同名类属性给遮盖了。借助这个功能,可以为各个实例的current_year属性定制不同的值。

python">p.cur

http://www.ppmy.cn/ops/30237.html

相关文章

学习100个Unity Shader (16) --- 程序纹理简述

文章目录 理解参考 理解 程序纹理顾名思义,就是通过代码生成的纹理,然后传入材质,生成图像。 假设,给一个模型添加了材质,并赋予了一个shader。shader中有一个纹理属性叫_MainTex。 程序纹理简单来说就是,…

spring源码分析之上下文构建

源码分析之上下文构建 以ClassPathXmlApplicationContext为例来说明 ApplicationContext context new ClassPathXmlApplicationContext("spring-lifecycle.xml"); 一个简单地创建ApplicationContext实例的方法,spring会做什么事呢? // this(n…

Spring Boot | Spring Security ( SpringBoot安全管理 )、Spring Security中 的 “自定义用户认证“

目录 : Spring Boot 安全管理 :一、Spring Security 介绍二、Spring Security 快速入门2.1 基础环境搭建 :① 创建Spring Boot 项目② 创建 html资源文件③ 编写Web控制层 2.2 开启安全管理效果测试 :④ 添加 spring-boot-starter-security 启动器⑤ 项目启动测试 三…

7.k8s中的名称空间namespace

目录 一、Namespace(命名空间) 二、查看系统的名称空间 1.查看系统中的名称空间列表 2.单独查看一个名称空间下的对应资源 三、名称空间的管理 1.创建名称空间 1.1响应式创建 1.2声明式创建 2.删除名称空间 四、资源引用名称空间 一、Namespace(命名空间) 命名空间(Name…

Github2024-04-28php开源项目日报Top9

根据Github Trendings的统计,今日(2024-04-28统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目9JavaScript项目1Blade项目1SecLists - 安全测试人员的伴侣 创建周期:4375 天开发语言:PHP协议类型:MIT LicenseStar数量:52010 个Fo…

有限单元法-编程与软件应用(崔济东、沈雪龙)【PDF下载】

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现,并提供所有案例完整源码;2.单元…

介绍一个在数据分析中常用的函数:data.iloc[]

平时处理数据集中,总是需要选中一些列的数据,去预测其他列的数据,所以data.iloc[],在数据分析中显得尤为方便。 介绍一下data.iloc[] data.iloc[] 是 Python 中 pandas 库的一个非常有用的功能,它允许你通过行和列的…

python 如何判断是函数还是方法 (function or method)

示例代码: def test_fn():passclass Test(object):staticmethoddef s_fn():passclassmethoddef c_fn(cls):passdef my_fn(self):pass如何判断是可调用的方法: hasattr(test_fn, __call__) # true hasattr(Test.s_fn, __call__) # true hasattr(Test.c…