python基础(十七)----- 三大特性

目录

17.1 封装性

 17.2 继承性

17.2.1 在子类中调用父类的代码

17.2.1.1 两种实现方式

17.3 多态性

17.4 装饰器

17.5 内置装饰器

17.6 作业

 17.7 作业解析


17.1 封装性

定义:将一些数据封装到一个自定义类中。向类外提供必要的功能,隐藏实现的细节。

  • 将一些数据封装到一个自定义类中

    • 将数据与对数据的操作相关联,代码可读性更高。便于分工,便于复用,可扩展性强。

    • 更符合人类的思考方式

初级封装:
	在类中定义的属性 只能当前类中使用 如果想在其他地方使用 必须创建实例对象 并通过实例对象.属性名的方式进行访问

	在一定程度上  会导致不合理的赋值
		cp.price = -1000 
高级封装
	把属性隐藏起来 外部也不能访问这个属性 实例对象也访问不到 只能通过这个类提供的 特殊的访问和修改的方法才能对这个属性进行操作。
	步骤:
	1.给属性私有化
		在属性名之前添加两个下划线
		原来的属性: age
		私有化之后: __age
	2.给私有化的属性添加访问和修改的方法
		访问方法:类外部需要获得这个被访问的属性时
		修改方法:类外部需要对这个属性进行修改的时候 提供的方法
class Commodity: 
    def __init__(self, cid, name, price):
        self.cid = cid
        self.name = name
        self.price = price
        
list_commodity_infos = [
    Commodity(1001, "商品1", 10000),
    Commodity(1002, "商品2", 10000),
    Commodity(1003, "商品3", 52100),
    Commodity(1004, "商品4", 20),
    Commodity(1005, "商品5", 30),
]

def print_commodity_infos():
    for commodity in list_commodity_infos:
        print(f"编号:{commodity.cid},商品名称:{commodity.name},商品单价:{commodity.price}")

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

  • 在设计类时,刻意地将一些属性和方法隐藏在类的内部,这样在使用此类时,将无法直接以“类对象.属性名”或者“类对象.方法名(参数)”的形式调用这些属性或方法,而只能用未隐藏的类方法间接操作这些隐藏的属性和方法。使用者不必了解具体的实现细节,只需要调用对外提供的功能。避免了外部对类内部数据的影响。

  • 在python中用双下划线开头的方式将属性或方法隐藏起来(设置成私有的)

  • 本质就是障眼法,实际也可以访问。

  • 私有成员的名称被修改为:_类名__成员名

属性@property

  • 公开的实例变量,缺少逻辑验证。私有的实例变量与两个公开的方法相结合,又使调用者的操作略显复杂。而属性可以将两个方法的使用方式像操作变量一样方便。

@property
def 属性名(self):
	return self.__属性名
@属性名.setter
def 属性名(self, value):
	self.__属性名= value
    
对象.属性名 = 数据
变量 = 对象.属性名

 17.2 继承性

继承:重用现有类的功能,并在此基础上进行扩展,将相关类的共性进行抽象,统一概念,隔离变化。

继承分为两种:

一、单继承:就是括号里面只有一个类

       继承顺序:如果父类和子类拥有同一个方法,那么子类会优先继承自己的方法和属性

二、多继承:就是括号里面有多个类

       继承顺序:遵循就近原则

继承是什么?
    子承父业 儿子继承父亲的产业

概念:万物皆对象 所有的对象都拥有一个公共的父类 叫做object

class Teacher(object):
	pass

 描述:Teacher继承了object类 拥有了object所有的属性和方法

 继承可以随便继承吗?
    小类继承大类
    类是有大小之分 大小之分可以理解为是范围的大小

    人类
        中国人
        美国人
        ...

    计算机 1
        笔记本电脑
        台式电脑
        ipad

小的类型称之为子类 大的类型称之为父类

子类可以继承父类大部分的属性和方法 私有化的属性和方法不能被继承

17.2.1 在子类中调用父类的代码

class Animal:
    def __init__(self, name, sex, age):
        self.name = name
        self.sex = sex
        self.age = age
        
    def eat(self):
        print("吃")

        
class Dog(Animal):
    def
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值