共计 1631 个字符,预计需要花费 5 分钟才能阅读完成。
此章波及:父类属性、子类属性、父类实例属性、子类实例属性如何相互拜访。
素材起源:三道题
[问题背景]
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. 批改胜利!
四、对象. 属性 & 类. 属性
对象. 属性
:批改实例属性 类. 属性
: 批改类属性
类属性 & 实例属性
按工夫:类申明 -> 类属性の创立、对象创立 -> 对象属性の笼罩
按意义:类属性:模板 & 共用、对象属性:具体化 & 理论利用
按内存:类属性:动态区、对象属性:堆内存
总结
正文完