面向对象(三) 组合 封装

组合

什么是组合:

组合指的是一个对象中,包含一个或多个对象

为什么使用组合:

减少代码冗余,降低耦合度

如何使用组合:

继承:继承是类与类的关系,子类继承父类的属性/方法,子类与父类是一种从属关系。

组合:组合是对象与对象的关系,一个对象拥有另一个对象中的属性/方法,是一种什么有什么的关系

演示:

#人类
class People:
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
#老师类
class Teacher(People):
    def __init__(self,name,age,sex):
        super().__init__(name,age,sex)
#学生类
class Student(People):
    def __init__(self,name,age,sex):
        super().__init__(name,age,sex)
#日期类        
class Date:
    def __init__(self,year,month,day):
        self.year = year
        self.month = month
        self.day = day
    def tell_birth(self):
        print(f'''
        ==出生年月日==
        年:{self.year}
        月:{self.month}
        日:{self.day}
        ''')
stu = Student('redwei',21,'male')
date_obj = Date(1998,4,7)
stu.date_obj = date_obj

stu.date_obj.tell_birth()

封装

什么是封装

封:比如将一个小袋子,封起来

装:比如将一堆小猫小狗和tank装在袋子里

封装指的是可以将一堆属性和方法,封装到到对象中

ps:对象就好比一个‘袋子/容器’,可以存放一堆属性和方法。

ps:存不是目的,取才是目的,可以通过‘对象.’的方式获取属性或方法

为什么使用封装

可以通过‘对象.’的方式‘存放/获取’属性或方法

可以拥有‘.’的机制

方便存取数据

怎么用封装
class User:
    x = 10 
    def func():
        pass
    obj = User()
    obj.y = 20
    obj---> x,func,y

访问限制机制

什么是访问限制机制:

凡是在类内部定义的属性或方法,以–开头的属性或方法名,都会被限制,外部不能直接访问该属性的原型。

python特有:凡是在类内部定义–开头的属性或方法,都会变形为–类名–属性/方法。

为什么要有访问限制:

将一些隐私的数据,隐藏起来,不让外部轻易获取。

可以将一堆数据封装成一个接口,可以让用户调用接口。

并且通过相应的逻辑,最后将数据返回给用户

如何实现:
class ATM:
    def __insert_card(self):
        print('插卡')
        pass
    def __input_pwd():
        print('输入密码')
        pass
    def __input_bal(self):
        print('输入取款金额')
        pass
    def __withdraw_cost(self):
        print('取款')
        pass
    def __print_flow(self):
        print('打印回执单')
        pass
    def withdraw(self):
        self.__insert_card()
        
        self.__input_pwd()
        
        self.__input_bal()
        
        self.__with_cost()
        
        self.__print_flow()

atm_obj = ATM()
#直接调用不能拿到数据
#必须通过其他接口
atm_obj.withdraw

property

什么是property

property是一个内置的装饰器,可以装饰在类’内部的方法’上.

可以将该方法调用方法由–>对象.方法()–>对象.方法

为什么使用property

在某些场景下,调用的方法只是用来获取计算后的的某个值.

必须通过 对象.方法() 方式调用,让方法看起来像动词

让名词的方法,调用时更为合理,目的是为了,迷惑调用者,调用的方法误以为是属性

如何用
class User:
    def __init__(self,name,weight,height):
        self.__name = name
        self.weight = weight
        self.height = height
        
    @property
    def bmi(self):
        return self.weight/(self.height**2)
    @property
    def name(self):
        return self.__name
    @name.setter
    def name(self,value):
        self.__name = value
    @name.deleter
    def name(self):
        del self.__name
        
user_obj = User('redwei',100,1.65)
print(user_obj.bmi)
我把月亮戳到天上 天就是我的 我把脚踩入地里 地就是我的 我亲吻你 你就是我的
原文地址:https://www.cnblogs.com/zhulipeng-1998/p/12863905.html