2020年6月5日09---python类与对象(下)

'''
==================================
cooding:utf-8
@Time    :2020/6/6 8:04
@Author  :henry
@Email   :yinpingwei@gmail.com
@File    :类与对象2.py
@Software:PyCharm
===================================


'''
类和对象
我懂,但是用起来有点难
类和对象的概念
类:同一类事务的   抽象描述
对象:符合类描述的   具体存在的

功能封装   函数 -
为什么要封装成函数类?   ---整体:属性和功能(行为)

首先是 定义类/实现类
生成对象
'''
class 类名(大驼峰):
    属性
    方法(功能(函数))
self : 是对象本身
实例方法:第一个参数是self

如果想在创建对象的同时,个性化定制对象的属性
初始化:魔法函数  __init__
在你创建对象的同事,自动调用。
类当中可有可无

类属性:直接在类当中定义的,不在任何的实例方法中
类行为:函数加上@classmethod   参数默认为cls   cls表示类本身
        可以通过cls访问类的属性,但是不能访问实例属性
        
# 优先用实例属性    
实例属性:self.属性名
实例方法:参数第一个是self
    实例都是可以访问类属性,类方法的
'''
# 第二种进行了初始化的实例
# 定义类
class Dog:     # 类名
    # kind = None
    # kind = '串串'     # 类属性   这样是写死了类属性,不管对象有多少,属性都是这个
    kind = '狗'    # 类属性 所有的对象都是一样的
    # 名字,品种,年龄

    def __init__(self, name, age, kind):  # 初始化  给了参数
        self.name = name     # 具体参数
        self.age = age       # 具体参数
        self.kind = kind     # 具体参数

    @classmethod    # 装饰器,声明为类方法
    def set_kind(cls):   # cls代表当前类,可以访问类属性
        print('我是类行为!!!')
        print(cls.kind)   # 访问类属性
        # print(cls.name)  # 但是不能访问实例属性


    # 叫-方法
    def bark(self):   # self是对象本身  类方法使用函数
        print('汪汪汪汪。。。。')
        print(self.name)

    # 吃-方法
    def eat(self):  # 类方法使用函数
        print('吃狗粮。。。')

    # 跑-方法
    def run(self):  # 类方法使用函数
        print(self.name,'跑起来了。。。')   #

    # 睡觉-方法
    def sleep(self):  # 类方法使用函数
        print('要睡觉啦')

# 实例化的同时,调用__init__ 有几个参数,在实例化的时候就要给几个参数
cqg = Dog('大白','3个半月','混血')    # cqg就是Dog类的一个对象   self 就是cqg
print('cqg对象的名字:',cqg.name)     # 实例化打印出名字
cqg.run()     # 直接调用方法
print(cqg.name)  # 通过实例访问类属性
# print(Dog.name)  # 不可以通过类访问实例属性
cqg.set_kind()    # 实例调用类方法
Dog.set_kind()   # 类调用类方法

print('**************************************************')
you_jm = Dog('小金','1岁','金毛')   # self 就是you_jm
print('you_jm对象的名字:',you_jm.name)
you_jm.run()     # 直接调用方法



课后作业
# 4、定义一个登录的测试用例类Case
# 属性:用例名称
# 用例步骤
# 预期结果
# 实际结果
# 方法:运行用例、用例结果(比对预期结果和实际结果是否相等)
# 实例化2个测试用例 ,并运行用例 ,呈现用例结果
print('************************************* 第四题**********************************************************')
class Case:   # 定义一个类

    use_account = 'woshijinyao300'    # 定义一个类属性-账户名
    use_password = '12345678'         # 定义一个类属性-密码

    def __init__(self,case_name,account_name,password,expected):       # 进行初始化实例属性
        self.case_name = case_name       # 具体实例属性-用例名称
        self.account_name = account_name   # 具体实例属性-账户名
        self.password = password            # 具体实例属性-密码
        self.expected = expected              # 具体实例属性-预期结果
        self.actual = None                      # 具体实例属性-实际结果不知道,先为空

    # 方法1:运行用例
    def case(self):         # 实例方法
        print('运行测试用例:{}\n用户名:{},密码:{},预期结果为:{}'.
              format(self.case_name,self.account_name,self.password,self.expected))
        if self.use_account == self.account_name and self.use_password == self.password:
            self.actual = '登录成功!'
            print('实际结果是:',self.actual)
        else:
            self.actual = '登录失败!'
            print('实际结果是:', self.actual)

    # 方法2:用例结果(比对预期结果和实际结果是否相等)
    def Compare(self):      # 实例方法
        if self.actual == self.expected:               # 如果实际结果 等于 预期结果
            print('用例通过')       # 则用例通过
        else:                     # 反之 如果实际结果 不等于 预期结果
            print('用例失败')      # 则用例失败

# 实例化2个测试用例 ,并运行用例 ,呈现用例结果
print('********************************************第一个用例*****************************************************')
test01 = Case('正常登录','woshijinyao300','12345678','登录成功!')    # 正确的账户密码登录
test01.case()            # 对象名(test01)调用实例方法(case),给出执行
test01.Compare()         # 对象名(test01)调用实例方法(Compare),给出执行

print('********************************************第二个用例*****************************************************')
test02 = Case('错误的密码登录','woshijinyao300','123458','登录失败!')    # 错误的密码登录
test02.case()            # 对象名(test02)调用实例方法(case),给出执行
test02.Compare()         # 对象名(test02)调用实例方法(Compare),给出执行




# 5、封装一个学生类Student,(自行分辨定义为类属性还是实例属性,方法定义为实例方法)
# -  属性:身份(学生),姓名,年龄,性别,英语成绩,数学成绩,语文成绩,
# -  方法一:计算总分,方法二:计算三科平均分,方法三:打印学生的个人信息:我的名字叫XXX,年龄:xxx, 性别:xxx。
# 实例化1个学生, 并打印学生个人信息,计算总分。
print('************************************* 第五题**********************************************************')
print('************************************第一种方法********************************************************')
class Student:    # 定义一个学生类名

    def __init__(self,student,name,age,gender,English_results,math_results,chinese_results):    # 初始化参数7个实例属性
        self.student = student         # 具体参数名
        self.name = name               # 具体参数名
        self.age = age                 # 具体参数名
        self.gender = gender           # 具体参数名
        self.English_results = English_results      # 具体参数名
        self.math_results = math_results            # 具体参数名
        self.chinese_results = chinese_results      # 具体参数名

    # 计算总分    -方法1
    def sum_score(self):      # 类方法使用函数
        return self.English_results + self.math_results + self.chinese_results     # 返回3科成绩的总值

    # 计算三科平均分    -方法2
    def average_score(self):     # 类方法使用函数
        return (self.English_results + self.math_results + self.chinese_results) / 3       # 返回3科成绩的平均分

    # 打印学生的个人信息:我的名字叫XXX,年龄:xxx, 性别:xxx   -方法3
    def personal_info(self):          # 类方法使用函数
        print('我的身份是:{},我的名字叫:{},年龄:{},性别是:{},英语成绩是:{},数学成绩是:{},语文成绩是:{},总成绩是:{},平均成绩是:{:.2f}'.
              format(self.student,self.name,self.age,self.gender,self.English_results,self.math_results,
                     self.chinese_results,member.sum_score(),member.average_score()))         # 打印个人信息,使用函数

# 进行实例化,调用__init__ 有7个参数,在实例化的时候就给7个参数
member = Student('学生','魏魏',20,'男',97,57,60)    # member就是Studer类的一个对象   self 就是member
member.personal_info()    # 调用对象(member)来访问类属性(personal_info)



print('************************************第二种方法********************************************************')
class Student:     # 定义一个类
    student = '学生'    # 定义一个类属性-学生

    def __init__(self,name,age,gender,English_results,math_results,chiese_results):  # 初始化实例属性
        self.name = name       # 定义实例属性-姓名
        self.age = age         # 定义实例属性-年龄
        self.gender = gender    # 定义实例属性-性别
        self.English_results = English_results      # 定义实例属性-英语成绩
        self.math_results = math_results            # 定义实例属性-数学成绩
        self.chiese_results = chiese_results        # 定义实例属性-语文成绩

    # 方法一:计算总分--实例方法
    def sum_score(self):
        total_score = self.English_results + self.math_results + self.chiese_results
        print('我的总分是:{}'.format(total_score))

    # 方法二:计算三科平均分--实例方法
    def average_score(self):
        ave = (self.English_results + self.math_results + self.chiese_results) / 3
        print('我的三科平均分是:{}'.format(ave))

    # 方法三:打印学生的个人信息:我的名字叫XXX,年龄:xxx, 性别:xxx--实例方法
    def personal_info(self):
        print('我的个人信息:我的名字叫:{},年龄是:{},性别是:{}'.format(self.name,self.age,self.gender))

# 实例化1个学生, 并打印学生个人信息,计算总分。
# 进行实例化,调用__init__ 有6个实例属性,在实例化的时候就给6个属性
member = Student('魏魏','25','男',90,85,86)
member.personal_info()   # 对象名(member)调用实例方法(personal_info),给出执行
member.sum_score()        # 对象名(member)调用实例方法(sum_score),给出执行
member.average_score()     # 对象名(member)调用实例方法(average_score),给出执行

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值