零基础学Python课后实战第七章

  • tips
  • 实战一:修改手机默认语言
  • 实战二:给信用卡设置默认密码
  • 实战三:打印每月销售明细

tips

对象:对象是事物存在的实体,如一个人。
通常将对象划分为两部分,即动态部分和静态部分。静态部分被称为“属性”,动态部分指的是对象的行为。

:是封装对象的属性和行为的载体,表示具有相同属性和方法的对象的集合。对象是类的实例。

面向对象程序设计的三大基本特征:封装、继承和多态。
封装是面向对象编程的核心思想,将对象的属性和行为封装起来,其载体就是类,类通常会对客户隐藏实现其细节,这就是封装的思想。
继承:可以把平行四边形类看作是继承四边形类后产生的类,将类似于平行四边形的类称为子类,类似于四边形的类称为父类或超类。子类的实例都是父类的实例,但不能说父类的实例是子类的实例。子类通过继承复用了父类的属性和行为,同时又添加了子类特有的属性和行为。
多态:将父类对象应用于子类的特征就是多态。例如,创建一个螺丝类,然后再创建两个类,短螺丝类和长螺丝类(粗细相同,螺纹密度也相同,即具有相同的特征),还具有不同的特征(长和短,长的可以固定大型支架,短的可以固定生活家具)。一个螺丝衍生出不同的子类,子类继承父类的同时也具备了自己的特征,并且能够实现不同的效果,这就是多态的结构。
例子:

class Geese:          #以大雁为例声明一个类
    '''大雁类'''
    pass
wildGoose = Geese()   #创建大雁类的实例
print(wildGoose)

运行结果

<__main__.Geese object at 0x000001E3EAFC7A90>

从结果中可以看出,wildGoose是Geese类的实例。

创建__int__()方法:

例子:以大雁为例声明一个类,并创建__int__()方法

class Geese:             #以大雁为例声明一个类
    '''大雁类'''
    def __init__(self):  #构造方法
        print("我是大雁类!")
wildGoose = Geese()      #创建大雁类的实例

运行结果

我是大雁类!

当自定义一些参数时用逗号隔开,如

def __init__(self,beak,wing,claw):  #构造方法

int()方法和实例方法一样,必须包含一个self参数,并且第一个参数必须是self。另外,比如定义一个实例方法fly(),即

def  fly(self, state)

在调用实例方法时用实例名称和点(.)操作符,即

wildGoose.fly("我会飞")

访问限制:
为保证类内部的某些属性或方法不被外部所访问,可以在属性或方法名名前面添加单下划线、双下划线或首尾加双下划线,从而限制访问权限。
1)首尾双下划线表示定义特殊方法,一般是系统定义名字,如__int__()。
2)以单下划线开头的表示保护类型的成员,只允许类本身和子类进行访问。保护属性可以通过实例名进行访问。
3)以双下划线开头的表示私有类型的成员,只允许定义该方法的类本身进行访问,不能通过类的实例进行访问,但可以通过“类的实例名 ._ 类名 __xxx”方式访问。

@property :将一个方法转换为属性。将方法转换为属性后,可以直接通过方法名来访问方法,不用加小括号()。为属性添加安全保护机制时,可以使用@property实现只读属性。但通过@property 转换后的属性不能重新赋值。
@show.setter :设置setter方法,让属性可修改。

实战一:修改手机默认语言

class Phone:                              #定义手机类
    '''手机类'''
    def __init__(self,language = '英文'): #构造方法
        if language == '英文':
           print("智能手机的默认语言为" + language)
        else:
           print("将智能手机的默认语言设置为" + language) 
Phone()            #无参数
Phone('中文')      #有参数  

运行结果

智能手机的默认语言为英文
将智能手机的默认语言设置为中文

实战二:给信用卡设置默认密码

class Card:
    '''信用卡类'''
    def __init__(self,number,code = "123456"):
        if code == "123456":
           print("信用卡" + str(number) + "的默认密码为"+ str(code))
        else:
            print("重置信用卡" + str(number) + "的密码为" + str(code))
Card("4013735633800642")   
Card("4013735633800642","168779")  

运行结果

信用卡4013735633800642的默认密码为123456
重置信用卡4013735633800642的密码为168779

实战三:打印每月销售明细

代码来自https://www.bilibili/video/BV1AK4y147q2?p=3

class SaleHandler:
    '''销售管理类'''
    def __init__(self):
        self.__sale_data = {              
             "2":[('T0001','笔记本电脑'),
                  ('T0002','荣耀6X'),
                  ('T0003','iPad'),
                  ('T0004','荣耀V9'),
                  ('T0005','MACBook')]}   #{key:value}
    def querySaleList(self,query_month):
        '''根据输入月份,查询商品明细'''
        if query_month in self.__sale_data:
            print("%s月份商品销售明细如下:" % query_month)
            for item in self.__sale_data[query_month]:
                print("商品编号:%s 商品名称:%s" % item)
        else:
            print("该月份没有销售数据或输入月份有误!")
print("------销售明细-----")
sh = SaleHandler()
while True:
    month = input("请输入要查询的月份(例如1、2、3等):")
    if month == 'quit':
        break 
    
    sh.querySaleList(month)

运行结果

------销售明细-----

请输入要查询的月份(例如123等):2
2月份商品销售明细如下:
商品编号:T0001 商品名称:笔记本电脑
商品编号:T0002 商品名称:荣耀6X
商品编号:T0003 商品名称:iPad
商品编号:T0004 商品名称:荣耀V9
商品编号:T0005 商品名称:MACBook

请输入要查询的月份(例如123等):1
该月份没有销售数据或输入月份有误!

请输入要查询的月份(例如123等):quit

更多推荐

零基础学Python课后实战第七章