面向对象三大特征之封装、继承、多态

1,封装:把多个东西打包放在一个地方

2,面向对象封装定义:将多个数据打包/封装到一个自定义的类里,对类外提供必要的功能,隐藏实现的细节。

分析:

将多个数据打包/封装到一个自定义的类里:

使思路清晰,将数据和数据的操作相关联,使代码可读性更高

#封装
'''commodity_list=[
        {"cid":1001,"name":"小明","price":"12"},
        {"cid":1002,"name":"小慧","price":"123"},
        {"cid":1003,"name":"小李","price":"1245"},
        {"cid":1004,"name":"小孙","price":"1235"},

]

def print_commodity():
    for commodity in commodity_list:
        print(f"编号:{commodity['cid']}--商品的名称:{commodity['name']}")
print_commodity()

'''


#做类

class Commodity:
            #ALT 回车
    def __init__(self,cid,name,price):
        self.cid = cid
        self.name = name
        self.price = price
        
commodity_list = [
        Commodity(1001,'小明',1679)
]

def print_commodity():
    for commodity in commodity_list:
        print(f"编号:{commodity.cid}--商品的名称:{commodity.name}")
print_commodity()

写程序的本质就是定义一系列的数据,再定义一系列的功能来操作数据

拿到大需求,先把需求分解为多个类;

类与类之间是行为上的不同,对象与对象间是数据上的不同。便于分工,使代码可读性更高

可扩展性强

对类外提供必要的功能,隐藏实现的细节:

无关紧要的功能不对外提供

class Atm:
    def card(self):
        pass
    def auth(self):
        pass
    def input(self):
        pass
    def task_money(self):
        pass
    def draw_money(self):
        self.card()
        self.auth()
        self.input()
        self.task_money()
。。。。。。

Pyton中实现隐藏通过私有化做的,在命令时使用双下划线隐藏

#例
class A:
    __X = 1
    
    def __init__(self,name):
        self.__name = name

    def __foo(self):
        print('run foo')

    def bar(self):
        self.__foo()    #self._A__foo
        print('from bar')

print(A.__X)    #实现了隐藏功能

#python是通过变形的操作来帮助实现隐藏东西
    #变形特点:
    #在类的外部,无法直接访问
    #在类的内部可以直接使用,在定义阶段这种变形就已经产生了

class GirlFriend:
    gender = '女'

    def __init__(self,name,age,weight):

        self.name = name
        self.__age = age    #self.set_age(age)
        self.__weight = weight
    
    def get_age(self):
        return self.__age

    def set_age(self,value):
        if 18<=value<=20:
            self.__age=value
        else:
            raise ValueError("不要")


G1 = GirlFriend("小明",50,300)

#类名加括号做实例化,做实例化就会触发__init__方法的执行
#公开的实例属性,缺少逻辑验证;私有的实例属性,配合两个公开的方法使用
class GirlFriend:
    gender = '女'

    def __init__(self,name,age,weight):
        #实例属性
        self.name = name
        self.age = age    #self.set_age(age)
        self.weight = weight

#快捷键:props
    @property        #装饰器(语法糖)get_age = property(get_age)
    def get_age(self):
        return self.__age

    @set_age.setter    #只负责拦截写入操作
    def set_age(self,value):
        if 18<=value<=20:
            self.__age=value
        else:
            raise ValueError("不要")
    #类属性,property对象可以拦截对age的操作
    age = property(get_age,set_age)

G1 = GirlFriend("小明",50,300)
#对象.属性    方法  对象自己  类
print(G1.age)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李子不吃李子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值