程序
class Demo_Property: #定义类
class_name = "Demo_property" #类属性
def __init__ (self,x=0):
self.x = x #实例属性
def class_info (self): #输出信息的方法
print("类变量值:",Demo_Property.class_name)
print("实例变量的值:",self.x)
def XXX (self,x): #修改实例属性的方法
self.x = x #注意实例属性的引用方式
def YYY (self,name): #修改类属性的方法
Demo_Property.class_name = name #注意类属性的引用方式
A = Demo_Property() #实例化类
B = Demo_Property()
print("初始化两个实例")
A.class_info()
B.class_info()
print("修改实例变量")
print("修改A实例变量")
A.XXX (5)
A.class_info()
B.class_info()
print("修改B实例变量")
B.XXX (10)
A.class_info()
B.class_info()
print("修改类变量")
print("修改A类变量")
A.YYY ("sun")
A.class_info()
B.class_info()
print("修改B类变量")
B.YYY ("flower")
A.class_info()
B.class_info()
运行结果
初始化两个实例
类变量值: Demo_property
实例变量的值: 0
类变量值: Demo_property
实例变量的值: 0
修改实例变量
修改A实例变量
类变量值: Demo_property
实例变量的值: 5
类变量值: Demo_property
实例变量的值: 0
修改B实例变量
类变量值: Demo_property
实例变量的值: 5
类变量值: Demo_property
实例变量的值: 10
修改类变量
修改A类变量
类变量值: sun
实例变量的值: 5
类变量值: sun
实例变量的值: 10
修改B类变量
类变量值: flower
实例变量的值: 5
类变量值: flower
实例变量的值: 10
总结
类属性是同一个类中所有实例共有的,在类体中独立定义,引用时要用“类名.类变量名”(中间一个.号)形式引用,如果某个实例对其修改,则影响这个类中所有实例
实例属性既使在同一个类中也是互不关联,互不影响。定义是使用“self.属性名”,调用时也使用它
参考:《21天学通python》
补充:子类调用父类的方法
.经典类的写法: 父类名称.init(self,参数1,参数2,…)
新式类的写法:super(子类,self).init(参数1,参数2,…)
调用未绑定的父类构造方法和super函数
super函数比在父类中直接调用未绑定方法更直观,但是其最大的有点是如果子类继承了多个父类,它只需要使用一次super函数就可以。然而如果没有这个需求,直接使用A.init(self)更直观一些。
https://www.cnblogs.com/MUMO/p/5725890.html
https://www.jianshu.com/p/dfa189850651