此章涉及:父类属性、子类属性、父类实例属性、子类实例属性如何互相访问。
素材来源:三道题
[问题背景]
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=3
class son(People): #我是子类!
cclass=0
s=son()
p=People()
p.change_son()
print(s.cclass) # 输出3.修改成功!
四、对象.属性 & 类.属性
对象.属性
:修改实例属性类.属性
:修改类属性
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。