当前位置 : 主页 > 编程语言 > python >

从一段简单的代码来看Python中的类与实例

来源:互联网 收集:自由互联 发布时间:2022-06-24
首先来看如下一段代码: 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赋值

首先来看如下一段代码:

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'。

上一篇:关于python入门之函数
下一篇:没有了
网友评论