python修改父类属性_类属性重写:保留父类更改

本文探讨了Python类方法中属性复制的重要性,如何使用`copy()`确保子类不改变父类的属性。通过示例展示了在类A和类B之间的属性复制,以及在实例方法字典中的复制行为。当涉及到深层对象时,需要注意只进行浅拷贝可能导致的引用问题。文章还提到了实例方法字典的复制在创建不同实例时的影响,并提供了相关代码示例。
摘要由CSDN通过智能技术生成

类方法中的属性复制

通过使用copy可以确保A的{},无论是谁定义它,都是B扩展它之前的起点。在class A:

d = {}

@classmethod

def c(cls):

print (cls.d)

class B(A):

d = A.d.copy()

d.update({0:1})

B.c()

A.c()

输出

^{pr2}$

开发人员更改A以后,B得到{},而不触及{}的定义。在class A:

d = {2:3}

@classmethod

def c(cls):

print (cls.d)

class B(A):

d = A.d.copy()

d.update({0:1})

B.c()

A.c()

输出{0: 1, 2: 3}

{2: 3}

警告:如果d中包含其他对象,您可能需要使用^{},否则只复制第一个“级别”,所有其他对象都将引用原始对象(这在我知道它之前曾给我带来了很多悲伤!)。在

继承实例方法

字典复制是python的,很明显,B获取{}并扩展它,但是由于您可能要在用例中创建实例(比如Dog),这些类可能会使用__init__方法而缺少class instance的概念。这将允许您拥有多个具有潜在唯一性的Bs

下面是一个包含实例的类定义示例class A:

def __init__(self):

self.d = {}

def c(self):

print (self.d)

class B(A):

def __init__(self):

A.__init__(self)

self.d.update({0:1})

# create instances of each class

a = A()

b1 = B()

b2 = B()

# call each instance's c method

b1.c()

b2.c()

a.c()

# you can even update on the fly without affecting the other!

a.d.update({2:3})

b1.d.update({4:5})

b2.d.update({7:8})

b1.c()

b2.c()

a.c()

输出{0: 1}

{0: 1}

{}

{0: 1, 4: 5}

{0: 1, 7: 8}

{2: 3}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值