如何通过简单代码理解Python中类与实例的关系?

2026-05-24 15:161阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计507个文字,预计阅读时间需要3分钟。

如何通过简单代码理解Python中类与实例的关系?

首先来看以下代码段:

python

1class Demo(object):

2def __init__(self):

3self.name='Tom'

4d=Demo()

5d.name='Linda'

6print(d)

如何通过简单代码理解Python中类与实例的关系?

修改后的代码(不超过100字):

pythonclass Person: def __init__(self): self.name='Tom' instance=Person() instance.name='Linda' print(instance.name)

首先来看如下一段代码:

1 class Demo(object):2 def __init__(self):3 self.name = 'Tom'4 d = Demo().name = 'Linda'5 print (d) #结果为:Linda6 print (Demo().name) #结果为:Tom


问题:在第4行代码中,将Demo().name赋值给了变量d,为什么第5行中变量d的值和第6行中Demo().name的值不一样呢?

分析:
1、公有实例属性的概念:通过类的实例定义的归属于类的实例的属性,就是公有实例属性,本例中self.name就是一个公有实例属性
2、公有实例属性的一个特性就是其必须由类的实例来进行修改和访问,不能通过类来进行修改和访问
3、这两者有什么区别吗?有,这个区别就是本例中的问题的答案。因为引用一个类,这个引用不会对类进行实例化;而调用一个类的实例,则会对这个类进行实例化。
4、类的实例化会造成什么后果?就是第2行中的那个__init__方法,类的实例化会触发该方法对类进行初始化操作,现在应该看得比较清楚了。
5、第4行将'Linda'同时赋值给了Demo().name和变量d,此时Demo().name和变量d的值都是'Linda';第5行打印变量d的值,输出为'Linda';第6行打印Demo().name的值,按说应该也是'Linda',但是不要忘记,Demo().name是对公有实例属性调用,仔细看这个调用方法,前面说过了,对公有实例属性的调用必须由类的实例来进行,也就是Demo()而不是Demo,Demo()直接触发了__init__方法的执行,该方法中又将公有实例属性name初始化为了'Tom',所以最后Demo().name的值又变回了'Tom',而不是'Linda'。

标签:

本文共计507个文字,预计阅读时间需要3分钟。

如何通过简单代码理解Python中类与实例的关系?

首先来看以下代码段:

python

1class Demo(object):

2def __init__(self):

3self.name='Tom'

4d=Demo()

5d.name='Linda'

6print(d)

如何通过简单代码理解Python中类与实例的关系?

修改后的代码(不超过100字):

pythonclass Person: def __init__(self): self.name='Tom' instance=Person() instance.name='Linda' print(instance.name)

首先来看如下一段代码:

1 class Demo(object):2 def __init__(self):3 self.name = 'Tom'4 d = Demo().name = 'Linda'5 print (d) #结果为:Linda6 print (Demo().name) #结果为:Tom


问题:在第4行代码中,将Demo().name赋值给了变量d,为什么第5行中变量d的值和第6行中Demo().name的值不一样呢?

分析:
1、公有实例属性的概念:通过类的实例定义的归属于类的实例的属性,就是公有实例属性,本例中self.name就是一个公有实例属性
2、公有实例属性的一个特性就是其必须由类的实例来进行修改和访问,不能通过类来进行修改和访问
3、这两者有什么区别吗?有,这个区别就是本例中的问题的答案。因为引用一个类,这个引用不会对类进行实例化;而调用一个类的实例,则会对这个类进行实例化。
4、类的实例化会造成什么后果?就是第2行中的那个__init__方法,类的实例化会触发该方法对类进行初始化操作,现在应该看得比较清楚了。
5、第4行将'Linda'同时赋值给了Demo().name和变量d,此时Demo().name和变量d的值都是'Linda';第5行打印变量d的值,输出为'Linda';第6行打印Demo().name的值,按说应该也是'Linda',但是不要忘记,Demo().name是对公有实例属性调用,仔细看这个调用方法,前面说过了,对公有实例属性的调用必须由类的实例来进行,也就是Demo()而不是Demo,Demo()直接触发了__init__方法的执行,该方法中又将公有实例属性name初始化为了'Tom',所以最后Demo().name的值又变回了'Tom',而不是'Linda'。

标签: