python类的属性怎么定义,python 类的属性
为了更好地解释类属性和对象属性之间的区别,首先创建类People和两个对象student1和student2,如下所示:
类人(对象):
# Class attribute指的是在类内部和方法外部定义的属性。
钱=10000
def __init__(本人,姓名,年龄,性别=1):
# Object attribute是指在方法内部定义的属性,如本例所示。
#姓名、年龄、性别都是对象属性。
self.name=name
年龄=年龄
self.gender=性别
#创建两个类的对象
student1=People(xfdjr ,20)
Student2=People(清秀的莉莉,25岁)
类别属性和对象属性之间的区别:
# Objects可以通过对象名调用对象属性和类属性。属性名称。
打印(学生2 .姓名)
print(student2.money)
#而且类还可以通过类名调用类的属性。属性名,但是
#不能以这种方式调用对象的属性
#例如,如果一个类调用name属性,它将报告一个异常。
# AttributeError:类型对象“People”没有属性“name”
打印(People.money)
打印(People.name)
结果如下:
使用中类属性和对象属性的区别:
#在操作之前,所有三个引用都是类属性money。
#所以这三笔钱的内存地址都是一样的
打印(id(student1.money))
打印(id(student2.money))
打印(id(People.money)
结果如下:
#执行以下操作
学生1 .钱-=1000
人.钱-=1000
#再次打印三者的内存地址。
打印(id(student1.money))
打印(id(student2.money))
打印(id(People.money))
再看看结果:
您会发现student1引用的money属性的内存地址与其他两个不同,但其他两个的内存地址仍然相同,原因如下:
表达式student1.money -=1000后,过程如下:第一次引用money属性时,过程如下:首先我们会找出对象中是否有money属性;如果有,我们就直接计算;如果没有,我们就去上课了解是否有金钱属性;如果我们在类中找到了money属性,那么student1会创建一个对象属性money,第二次调用时,会调用自己的对象属性,而不是类People中的属性。但是student2不会创建自己的money属性,而是引用类People的属性,所以student2和People引用的是同一个属性。
#当student2做同样的操作时,也会在student2中创建一个money属性。
#此时,三者的货币属性的内存地址都不同。
钱=1000
打印(id(student1.money))
打印(id(student2.money))
打印(id(People.money))
结果如下:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。