• 020python-类与对象


     1、类与对象:

    类 是一种抽象的概念:具有某一类共同属性和特性的事物

    类一般包含属性以及方法,但不是都必须包含的

    类的划分标准:由写代码的人来定

    类的语法: 关键字:class

    类名规范:数字、字母、下划线组成,不能以数字开头,首字母大写,驼峰命名

    类属性:放在类里面的变量值

    类方法/类函数:写在类里面的函数

    属性和方法只能实例调用

    class类名:

            类属性

            类方法/类函数

    # 创建一个男朋友类: 

    1. class BoyFriend:
    2. #类属性
    3. height=175
    4. weight=130
    5. money='会赚钱'
    6. #类函数/类方法
    7. # self是一个固定的占坑符,类里面的方法都必须带self这个参数
    8. # 传这个参数说明这是一个类方法/函数,实例可以调用
    9. def msg(self):
    10. print(self)
    11. def cooking(self): #self是实例本身,传递实例
    12. print(self.money+'会做饭的男盆友')
    13. def earn(self):
    14. print('会赚钱的男盆友')

    2、类里面的方法分为三种

    (1)实例方法:意味着这个方法只能实例来调

    1-1创建实例: 实例/对象 具体的一个例子 类名()

    实例具有类里面的所有属性和方法的使用权限

    调用属性 > 实例.属性名

    调用方法/函数 > 实例.函数/方法名() ,def开头的才是函数

    1. class BoyFriend:
    2. #类属性
    3. height=175
    4. weight=130
    5. money='会赚钱'
    6. #类函数/类方法
    7. # self是一个固定的占坑符,类里面的方法都必须带self这个参数
    8. # 传这个参数说明这是一个类方法/函数,实例可以调用
    9. def msg(self):
    10. print(self)
    11. def cooking(self): #self是实例本身,传递实例
    12. print(self.money+'会做饭的男盆友')
    13. def earn(self):
    14. print('会赚钱的男盆友')
    15. #创建一个实例/对象,一个具体的例子:类名()
    16. BoyFriend()
    17. #用变量bf存储实例
    18. bf=BoyFriend()
    19. #打印类 <__main__.BoyFriend object at 0x00000214A8234820>,object是一个实体对象,0x00000214A8234820是内存地址,说明创建的对象存在内存地址里
    20. print(bf)
    21. print('*'*30)
    22. # 调用msg函数/方法并打印,可以看出self就是实例本身,也就是说实例本身在调用这个函数/方法且self参数可以修改
    23. bf.msg()
    24. #调用属性:实例.属性名
    25. bf.height
    26. #调用函数/方法:实例.函数名/方法名()
    27. bf.cooking()

     1-2:不创建实例,直接以类对象进行访问  > 此种方法不推荐使用

    1. # 创建一个男朋友类:
    2. class BoyFriend:
    3. #类属性
    4. height=175
    5. weight=130
    6. money='会赚钱'
    7. def cooking(self): #self是实例本身,传递实例
    8. print(self.money+'会做饭的男盆友')
    9. #不创建实例,直接以类对象进行访问
    10. BoyFriend.cooking()

    此时运行报错TypeError: BoyFriend.cooking() missing 1 required positional argument: 'self'

     在1-1中打印self可以看到“self是实例本身,传递实例”,要解决TypeError: BoyFriend.cooking() missing 1 required positional argument: 'self'问题,需要在函数中传递实例

    1. # 创建一个男朋友类:
    2. class BoyFriend:
    3. #类属性
    4. height=175
    5. weight=130
    6. money='会赚钱'
    7. def cooking(self): #self是实例本身,传递实例
    8. print(self.money+'会做饭的男盆友')
    9. #1、创建实例
    10. bf=BoyFriend()
    11. #2、不创建实例,直接以类对象进行访问,函数名中传递实例
    12. BoyFriend.cooking(bf) #显示的传递实例
    13. #3、创建实例
    14. bf=BoyFriend()
    15. bf.cooking() #隐藏的传递实例

    以上可以看出,传递实例分为隐藏式的传递和显示的传递,创建实例,使用实例调用属性(方法)属于隐藏的传递,不使用实例,直接以类对象进行访问,在函数名中传递实例属于显示传递

     (2)类方法

    @classmethod可以直接调用,同时实例也可以

    类方法不可以调用类里面的属性值,如果要参数请自己传递

    1. class BoyFriend:
    2. #类属性
    3. height=175
    4. weight=130
    5. money='会赚钱'
    6. @classmethod # 类方法
    7. def swimming(cls):
    8. print('男盆友还要回游泳')
    9. # 类方法不可以调用类里面的属性值,如果要参数请自己传递
    10. # print(self.money+'男盆友还要回游泳') #报错NameError: name 'self' is not defined
    11. #类方法类名调用
    12. BoyFriend.swimming()
    13. #实例调用
    14. b=BoyFriend()
    15. b.swimming()

    3、静态方法

    @staticmethod  可以直接调用,同时实例也可以

    静态方法不可以调用类里面的属性值,如果要参数请自己传递

    1. class BoyFriend:
    2. #类属性
    3. height=175
    4. weight=130
    5. money='会赚钱'
    6. @staticmethod #静态方法
    7. def sing():
    8. print( '男朋友还可以会唱歌来哄女朋友开心的呦')
    9. # 静态方法不可以调用类里面的属性值,如果要参数请自己传递
    10. #print(self.money+'男朋友还可以会唱歌来哄女朋友开心的呦') #报错NameError: name 'self' is not defined
    11. BoyFriend.sing() #静态方法类名调用
    12. bf=BoyFriend()
    13. bf.sing() #实例调用

    4、 总结:

    (1)相同点:

    实例方法self、类方法cls、静态方法(普通方法,可传可不传),实例和类名都可以直接调用

    (2)不同点:

    1.静态方法和类方法不可以调用类里面的属性值,如果要参数请自己传递

    2.什么时候去定义为静态方法和类方法?

    当你的某个函数与其他的类函数、类属性没有任何关系的时候就可以定义静态方法和类方法

    3、初始化函数

    1、初始化函数

    什么是初始化函数?

    class 类:
        def __init__(self):
            print('实例化成功!')

    实例 = 类()

    初始化函数的意思是,当你创建一个实例的时候,这个函数就会被调用。上面的代码在执行实例 = 类()的语句时,就自动调用了__init__(self)函数。

    初始化函数的写法是固定的格式:中间是“init”,这个单词的中文意思是“初始化”,然后前后都要有【两个下划线】,然后__init__()的括号中,第一个参数一定要写上self,不然会报错。

    同时,这个初始化函数照样可以传递参数

    1. 初始化函数
    2. class TestingEngineer:
    3. #类属性
    4. # name='暖暖'
    5. # age=28
    6. # height=150
    7. # weight=100
    8. # 初始化函数(将固定值的类属性写为初始化函数,可以随时修改值)
    9. def __init__(self,name,age,height,weight): #实例方法
    10. self.name=name
    11. self.age=age
    12. self.height=height
    13. self.weight=weight
    14. #类方法
    15. def work_experience(self):
    16. # print(self.name+'今年'+self.age+'岁,'+'体重'+self.weight+',身高'+self.height+',具有五年的测试工作经验')
    17. print('{0}今年{1}岁,体重{2},身高{3},具有五年的测试工作经验'.format(self.name,self.age,self.weight,self.height))
    18. def tool(self):
    19. print('{0}今年{1}岁,体重{2},身高{3},可以使用jmeter、python等工具'.format(self.name,self.age,self.weight,self.height))
    20. # 初始化函数
    21. t1=TestingEngineer('暖暖','28','150','100')
    22. t1.work_experience()

    2、所有函数里面的方法,类函数里面都可以有

    1. class TestingEngineer:
    2. #初始化函数
    3. def __init__(self,name,age,height,weight): #实例方法
    4. self.name=name
    5. self.age=age
    6. self.height=height
    7. self.weight=weight
    8. #类方法
    9. # language位置参数,lines默认参数,位置参数要在默认参数前面
    10. def coding(self,language,lines=1000):
    11. print('会{0}语言,已经写了{1}行'.format(language,lines))
    12. #不定长参数
    13. def cooking(self,*agr):
    14. for item in agr:
    15. # print('{0}会做{1}'.format(self.name,item))
    16. print(self.name+'会做{0}'.format(item))
    17. # 返回值
    18. def play(self,play_game):
    19. return(self.name+'会玩{0}'.format(play_game)) #返回值
    20. # 如果类里面有初始化函数,创建实例的时候,就必须要在实例里面传递对应的参数值
    21. 实例存储到变量里面去调用
    22. t=TestingEngineer('华华','28','159','100')
    23. t.coding('python')
    24. 直接创建实例调用方法
    25. TestingEngineer('华华','28','159','100').coding('python')
    26. t.cooking('西红柿鸡蛋','清炒西蓝花')
    27. #打印出输出的返回值数据
    28. print(t.play('王者荣耀'))

     3、初始化函数可以给出默认值或者直接将值写死

    1. class TestingEngineer:
    2. # 初始化函数没有return返回值
    3. # 实例方法,初始化函数可以有默认值参数,一般不传动态参数和不定长参数
    4. def __init__(self,name,age=25):
    5. self.name=name
    6. self.age=age
    7. self.height=160 #身高写死
    8. #类方法
    9. def work_experience(self):
    10. print('{0}今年{1}岁,身高{2},具有五年的测试工作经验'.format(self.name,self.age,self.height))
    11. t=TestingEngineer('华华','180')
    12. t.work_experience()

     4、类函数之间可以相互调用

    1. class TestingEngineer:
    2. def __init__(self,name,age,height,weight): #实例方法
    3. self.name=name
    4. self.age=age
    5. self.height=height
    6. self.weight=weight
    7. #类方法
    8. #不定长参数
    9. def cooking(self,*agr):
    10. for item in agr:
    11. # print('{0}会做{1}'.format(self.name,item))
    12. print(self.name+'会做{0}'.format(item))
    13. # language位置参数,lines默认参数,位置参数要在默认参数前面
    14. def coding(self,language,*args,lines=1000):
    15. # 函数之间可以相互调用
    16. # self.cooking() #可以不传参
    17. # self.cooking('蛤蜊汤') #此时参数是写死的
    18. self.cooking(*args) #不想写死可以在该函数中传不定长参数
    19. print('会{0}语言,已经写了{1}行'.format(language,lines))
    20. t=TestingEngineer('joy','23','180','120')
    21. t.coding('python','巴巴鱼','草鱼')

  • 相关阅读:
    计算机毕业设计ssm+vue 菜谱制作小程序
    Linux 常用工具(yum、vim、gcc、gdb、git)
    【数据挖掘】2020奇安信秋招算法方向试卷3 笔试题解析
    Go的简单入门:写一个Web应用
    高防CDN:游戏应用抵御DDoS攻击的坚固堡垒
    第十四届蓝桥杯第一期模拟赛题解[官方模拟赛]
    【2023研电赛】商业计划书命题:基于三维视觉感知的可重构智能表面通信设计
    【笑小枫的SpringBoot系列】【十四】SpringBoot发送邮件
    代码源每日一题div1 平方计数
    Mapbox-gl 关闭所有Popup,以及关闭按钮出现黑色边框bug
  • 原文地址:https://blog.csdn.net/weixin_47481102/article/details/126352439