python3学习笔记 (14) 面向对象的特性 封装和继承
封装:
定义:是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法:也就是将类的实例属性设置为私有属性。具体如下:
class Student(object): def __init__(self,name,age,sex): 对类进行初始化的过程 ,简单来说,如果这个类要用到实例属性,相当于函数里面的形式参数,有的话就有,不用的话,它也是存在的, self.name=name 只不过没有写 self.age=age self.sex=sex def getName(self): return self.name def setName(self): self.age=age def show(self): print(f"my name is {self.name},my age is {self.age},and my sex is {self.sex}" ) stu=Student(name="baixiaoning",age=18,sex="男") stu.show()
输出结果:
my name is baixiaoning,my age is 18,and my sex is 男
修改实例属性的内容:先get获取参数 在set修改参数
class Student(object): def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def getName(self): return self.name def setName(self,name): self.name=name
def show(self): 普通方法 print(f"my name is {self.name},my age is {self.age},and my sex is {self.sex}" ) 格式化输出 stu=Student(name="baixiaoning",age=18,sex="男") stu.setName(name="bai") stu.show()
输出结果:
my name is bai,my age is 18,and my sex is 男
show()方法中有别的参数时。我们称为方法参数,要输出,具体如下: 需要注意的是。要输出它,在调用方法时要给他赋值
class Student(object): def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def getName(self): return self.name def setName(self,name): self.name=name def show(self,asd): print(f"my name is {self.name},my age is {self.age},my sex is {self.sex},and method params is {asd}" ) stu=Student(name="baixiaoning",age=18,sex="男") # stu.setName(name="bai") # stu.show() stu.show(asd="www")
输出结果为:
my name is baixiaoning,my age is 18,my sex is 男,and method params is www
实例化:

继承
定义:子类继承父类,原则上可以继承父类所有的方法和属性,一般不超过两代
不管是单个继承还是多个继承,不管是从上到下还是从左到右进行继承。都可以总结为子类先找自己的,如果自己有 ,那就用自己的。如果没有,然后单个继承
就是接着从上到下,多类继承就是从左到右继承。从左到右根据位置继承。
- java和python的继承有什么区别?
- java是单继承的,python是多继承的(可以继承多个类)
- 类中的关键字:
- 基类:所有类的祖先
- 派生类:子类,继承其他的类
- 子类继承父类的实例属性:
- 1. super().__init__(属性)
方法重写:父类和子类的方法一致,这时我们就认为子类复写了父类的方法 - 因为父类的方法无法满足子类的要求,所以才有了方法复写
1.假设当父类的方法可以满足子类的需求,这时候不需要方法复写,如下:
class Father(object): def __init__(self,xingge): self.xingge=xingge def show(self): print("性格是温和") class Son(Father): def __init__(self,xingge,hoppy): self.hoppy=hoppy super(Son, self).__init__(xingge) # super().__init__(xingge) 子类继承父类的实例属性所用的方法 obj=Son(xingge="温和",hoppy="读书") obj.show()
输出结果:
性格是温和
2.当父类的方法无法满足子类的需求时,用到方法复写
class Father(object): # country="中国人" def __init__(self,xingge): self.xingge=xingge def show(self): print("性格是温和") class Son(Father): def __init__(self,xingge,hoppy): self.hoppy=hoppy super(Son, self).__init__(xingge) # super().__init__(xingge) def show(self): print("我的性格:{0},我的爱好:{1}".format(self.xingge,self.hoppy)) obj=Son(xingge="温和",hoppy="读书") 定义类的对象 obj.show() 调用类的方法
输出结果:
我的性格:温和,我的爱好:读书
数据属性
类的数据属性是针对所有对象共享的,也就是说针对一个类进行实例化后的对象,调用数据属性,它的内存地址都
是一样的,如下: 相当于函数中的全局变量,数据属性对类下所有对象都是共享的
class Father(object): country="中国人" def __init__(self,xingge): self.xingge=xingge def show(self): print("性格是温和") class Son(Father): def __init__(self,xingge,hoppy): self.hoppy=hoppy super(Son, self).__init__(xingge) # super().__init__(xingge) def show(self): print("我的性格:{0},我的爱好:{1}".format(self.xingge,self.hoppy)) obj=Son(xingge="温和",hoppy="读书") obj.show() print(obj.country)
输出结果:
我的性格:温和,我的爱好:读书
中国人
继承的原则:
继承的第一原则:从上到下
约束条件:从上到下原则的前提是子类没有重写父类的方法,先输出上边的
继承的第二原则:从左到右
约束条件:从左到右原则的前提是子类重写了父类的方法,先输出下边的
具体如下: 从上到下
class Father(object): country="中国人" def __init__(self,xingge): self.xingge=xingge def show(self): print("性格是温和") class Son(Father): def __init__(self,xingge,hoppy): self.hoppy=hoppy
super(Son, self).__init__(xingge)
def info(self): print("我的性格:{0},我的爱好:{1}".format(self.xingge, self.hoppy))
obj=Son(xingge="温和",hoppy="读书") 定义类的对象
obj.show() 调用类的方法
输出结果:
性格是温和
从左到右:(1)当子类中的方法可以满足需求时,就用自己的方法

输出结果:
my name is bai,my age is 18,and my sex is男
(2)当子类中的方法不能满足需求时,继承父类的方法:图中 show()的方法被我注释了,这时候要继承父类的方法 第一种情况

输出结果:
wo shi a
(3)当子类中的方法不能满足需求时,继承父类的方法:图中 show()的方法被我注释了,这时候要继承父类的方法 从上到下 第二种情况

输出结果:
wo shi b

浙公网安备 33010602011771号