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

 

 

 

 

 

 


 

posted @ 2021-11-30 19:36  柏晓宁  阅读(81)  评论(0)    收藏  举报