本章涉及:父类属性、子类属性、父类实例属性、子类实例属性如何相互访问。资料来源:三问【问题背景】list集合有26个小写字母。本类属性classalpha:list=[]defshow(self):#形参为self(本类的整个对象)print(self.list)#通过形参访问“本类属性”#访问父类属性classalpha_son(alpha):defchange(self,list):#这个self既包含本类也包含父类的信息cnt=0foriinself.list:#通过形参self访问“父类属性”"self.list[cnt]=i.upper()cnt+=1returnself.listself.list可以改成alpha.list吗?能。Type.Property是访问或修改类属性(方法修改前的属性)。但是,由于list是可变类型,修改前和修改后是同一个实例内存空间,所以无论是“类属性访问”还是“实例属性访问”都是修改后的访问结果。定义一个描述矩形的类,包括长宽两个属性,以及计算面积的方法。classtangle:a=0b=0def__init__(self,a,b):#如果要访问外部输入,加上相应的形参~#这样就可以通过形参访问了:self.a=a#访问本类属性:通过self参数self.b=b#访问外部变量:通过定义参数defS(self):returnself.a*self.b2.跨父子类访问:不能通过参数已经...2.按要求编写一个应用程序:(1)上述矩形类(2)编写一个继承于矩形类的类,该类描述了一个长方体,具有长、宽属性和高度,以及计算体积的方法。classtangle():attributea,attributeb...#该类访问父类的实例属性classtangle_3d(tangle):h=0def__init__(self,h):#传入形参~self.h=h#使用形参访问~defV(self):#啊~我发现即使父类的参数传入形参也无法访问...returnt.a*t.b*self.h#然后使用对象访问!t=tangle(10,10)#创建了一个t对象!3.要求写一个应用程序:定义类Circle(圆),属性有半径,构造方法可以初始化属性,返回圆的面积。定义class>Cylinder(圆柱形),属性有半径和高度;返回圆柱体的体积#此类方法访问此类属性classcircle:r=0def__init__(self,r):self.r=rdefS(self):return3.1415926*self.r*self.r#该类访问父类类cylinder的实例属性:h=0def__init__(self,h):self.h=hdefV(self):returnc.r*c.r*3.14*self.h#通过对象访问父类属性c=circle(10)print(c.S())cy=cylinder(20)print(cy.V())3.探索:其他情况,本类方法1访问这个类的方法2?不能访问,因为方法调用后,方法中的局部变量会破坏父类。访问子类属性?能。按对象名称。classPeople:#我是父类!name=''age=''defchange_son(self):#我要改子类属性!s.cclass=3classson(People):#我是子类!cclass=0s=son()p=People()p.change_son()print(s.cclass)#输出3.修改成功!4.对象。属性和类。属性对象。属性:修改实例属性类。Attribute:修改类属性ClassAttribute&InstanceAttributeByTime:ClassDeclaration->ClassAttributeCreation,ObjectCreation->ObjectAttributeのOverride含义:类属性:template&sharing,objectattribute:concrete&actualapplicationbymemory:classattribute:静态区,对象属性:堆内存汇总
