面向对象的三特性:封装,继承,多态

 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

一、组合

#1.组合:自定义类的对象作为另一个类的属性
class teacher:
def __init__(self,name,age):
self.name=name
self.age=age
t1=teacher('jun',24)

class student:
def __init__(self,name,age,teacher): #此处将对象t1作为实参传给形参teacher
self.name=name
self.age=age
self.teacher=teacher
t2=student('wen',18,t1) #将上一个类的对象t1作为参数传入类的属性里
print(t2.teacher)#<class '__main__.teacher'>
print(t2.name,t2.age)#wen 18
print(t2.teacher.name,t2.teacher.age)#jun 24 teacher是上一个类的对象t1,实际是t1.name,t1.age


二、继承
#二、继承
#特点:子类与父类形成的一种关系,可以让子类直接获取父类的属性与方法
#优点:减少了代码冗余

#将所有共同的属性与方法抽离出来,形成父类
#父类是多个有共同点的普通类抽离共有属性与方法形成的类

class teacher:
def __init__(self,name):
self.name=name
def eat(self):
print(self.name+'该学习了!')
te1=teacher('关羽')
te1.eat() #关羽该学习了!

class student(teacher):
pass
st1=student('张飞')
st1.eat() #张飞该学习了!

class master(teacher):
pass
ma1=master('刘备')
ma1.eat() #刘备该学习了!


三、继承的信息
class abc:
def __init__(self,name):
self.__name=name #专属于对象的属性,该对象所对应的类是取不到这个值得

@property
def name1(self): #此处的方法,不要和init方法的形参的名字一样,不然会报错
return self.__name

@classmethod #加上这个装饰器,系统会默认返回一个None
def c_fn(cls):
print(cls,'come on ')
def o_fn(self):
print('o_fn')
class asd(abc):
pass
asde=asd(1) #给abc的属性传一个参数,self.__name=1
print(asde.name1) #加上装饰器以后,这个操作实际上是调用方法name1(),在方法内部是可以直接访问封装的属性的,因此返回值1

#继承关系
#父类所有未封装的属性和方法,子类都能访问
#父类的所有封装的属性和方法,子类都能访问
# ——在外界通过子类或子类对象,不能访问
# ——在子类内部通过子类或子类对象也不能访问























扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄