此章波及:父类属性、子类属性、父类实例属性、子类实例属性如何相互拜访。
素材起源:三道题

[问题背景]
list汇合有 26个小写字母
父类alpha性能:展现list汇合
子类alpha_son性能:将List汇合内的字母转换成大写

一、“形参”决定如何拜访

#拜访 本类类属性class alpha:    list=[]    def show(self):  #形参是self (本类整个对象)        print(self.list) #通过形参拜访“本类类属性”
# 拜访 父类类属性class alpha_son(alpha): def change(self,list): #这个self既蕴含本类,又蕴含父类的信息     cnt=0     for i in self.list: #通过形参self拜访“父类类属性”         self.list[cnt]=i.upper()         cnt+=1     return self.list

self.list改成alpha.list能够吗?
能够。类型.属性是拜访或批改类属性(通过办法批改前的属性)。然而,因为list是可变类型,批改前和批改后是同一块实例内存空间,所以不论是“类属性拜访”还是“实例属性拜访”都是拜访的扭转后的后果。

定义一个类,形容一个矩形,蕴含有长、宽两种属性,和计算面积办法。
class tangle:    a=0    b=0    def __init__(self,a,b):    # 想拜访外界输出的,就加上相应的形参~    # 这样就能通过形参拜访啦:        self.a=a  #拜访本类属性:通过self形参        self.b=b  #拜访外界变量:通过定义的形参    def S(self):        return self.a*self.b

二、跨父子类的拜访:无奈通过形参了...

2.按要求编写一个应用程序:
(1)上述的矩形类
(2)编写一个类,继承自矩形类,同时该类形容长方体,具备长、宽、高属性,
和计算体积的办法。
class tangle():  属性a , 属性b  ... #本类 拜访 父类の实例属性class tangle_3d(tangle):    h=0    def __init__(self,h): #传入形参~        self.h=h #利用形参拜访~    def V(self):    # 啊~发现即便把父类的参数传入形参,也不能拜访了...       return t.a*t.b*self.h  #那就利用对象拜访!t=tangle(10,10) #创立了一个t对象!
3.要求编写一个应用程序:
定义类Circle(圆),属性有半径,构造方法能够为属性初始化,返回圆的面积 定义类>Cylinder(圆柱),属性有半径,高;返回圆柱的体积
#本类办法 拜访 本类属性class circle:    r=0    def __init__(self,r):        self.r=r    def S(self):        return 3.1415926*self.r*self.r# 本类 拜访 父类の实例属性class cylinder:    h=0    def __init__(self,h):        self.h=h    def V(self):        return c.r*c.r*3.14*self.h  #通过对象拜访父类属性                               c=circle(10)print(c.S())cy=cylinder(20)print(cy.V())

三、探索:其余状况

本类办法1 拜访 本类办法2 ?

不能拜访,因为一个办法调用后,该办法内的局部变量就销毁

父类 拜访 子类属性?

能够。通过对象名。

class People: #我是父类!    name=''    age=''    def change_son(self): #我要改子类属性!        s.cclass=3class son(People): #我是子类!    cclass=0s=son()p=People()p.change_son()print(s.cclass)  # 输入3.批改胜利!

四、对象.属性 & 类.属性

对象.属性:批改实例属性
类.属性:批改类属性

类属性 & 实例属性

按工夫:类申明->类属性の创立、对象创立->对象属性の笼罩

按意义:类属性:模板&共用、对象属性:具体化&理论利用

按内存:类属性:动态区、对象属性:堆内存

总结