python学习记录10--给自己:类与对象

从面向过程到面向对象的编程

  • 面向过程编程:

看中的是解决问题的过程,首先分析出解决问题的步骤,然后按照分析出来的步骤进行解决问题,这就是面向过程编程。面向过程编程主要使用到函数知识,将每个步骤的过程封装在一个函数里再依次调用。

  • 面向对象编程:

主要会使用到“类与对象”方面的知识:得先有类才会有对象,类是对象的母版

一、认识类

1.【类】是一个函数包。类中可以放置函数和变量,然后类中的函数可以很方便的使用类中的变量。

2.就像函数用  " def()  " 定义,则类用 " class() " 来定义。

3.在类中我们将定义的函数称作类的 “方法” ,通常用“类名.函数名”的格式来让类中的方法运行起来。

4.在类中我们定义的变量叫做类的 “属性” ,通常用“类名.变量名”的格式将类中的属性值提取出来。

5.不过类中的属性(变量)也不是不能改变,使用类名.变量名的格式,可以让我们在类的外面,增加修改类的属性:

5.类方法不仅可以调用类属性,还可以直接调用其它类方法(如下所示:)

class 成绩单():
    @classmethod
    def 录入成绩单(cls):
        cls.学生姓名 = input('请输入学生姓名:')
        cls.语文_成绩 = int(input('请输入语文成绩:'))
        cls.数学_成绩 = int(input('请输入数学成绩:'))

    @classmethod
    def 计算平均分(cls):
        平均分 = (cls.语文_成绩 + cls.数学_成绩)/2
        return 平均分

    @classmethod
    def 评级(cls):
        平均分 = cls.计算平均分()
        if 平均分>=90:
            print(cls.学生姓名 + '的评级是:优')
        elif 平均分>= 80 and 平均分<90 :
            print(cls.学生姓名 + '的评级是:良')
        elif 平均分>= 60 and 平均分<80 :
            print(cls.学生姓名 + '的评级是:中')
        else:
            print(cls.学生姓名 + '的评级是:差')

成绩单.录入成绩单()
成绩单.评级()
class aaa():
    b1=100
    b2=200
    @classmethod               #①
    def 函数1(cls):            #②
        print(cls.b1)         #③
        print(cls.b2)

① 第一个格式@classmethod的中文意思就是“类方法”,@classmethod声明了函数1是类方法,这样才能允许函数1使用类属性中的数据。类中的方法在需要调用类中的属性时才需要使用@classmethod

② 第二个格式cls的意思是class的缩写。如果类方法函数1想使用类属性(也就是类中的变量),就要写上cls为函数1的第一个参数,也就是把这个类作为参数传给自己,这样就能被允许使用类中的数据。

③ 第三个格式是cls.变量。类方法想使用类属性的时候,需要在这些变量名称前加上cls.。

二、给类方法传参

1.类方法仅使用外部参数

一首诗 = ['《卜算子》','我住长江头,','君住长江尾。','日日思君不见君,','共饮长江水。']

class 念诗类():
    def 念诗函数(参数):
        for i in 参数:
            print(i)

念诗类.念诗函数(一首诗)

2.类方法仅使用内部参数

class 念诗类():
    一首诗 = ['《卜算子》','我住长江头,','君住长江尾。','日日思君不见君,','共饮长江水。']

    @classmethod
    def 念诗函数(cls):
        for i in cls.一首诗:
            print(i)

念诗类.念诗函数()

3.类同时使用内部参数和外部参数

class 加100类():
    变量 = 100
    
    @classmethod
    def 加100函数(cls,参数):
        总和 = cls.变量 + 参数
        print('加100函数计算结果如下:')
        print(总和)

参数 = int(input('请输入一个整数:'))
加100类.加100函数(参数)

三、增加\修改类的属性

1.从外部增加\修改类属性

class 类():
    @classmethod
    def 打印类属性(cls):
        print(cls.变量)

类.变量 = input('请输入字符串:')     #输入asd
类.打印类属性()                      #输出asd

2.从内部增加\修改类属性

class 类():
    @classmethod
    def 增加类属性(cls):
        cls.变量 = input('请随意输入字符串:')

类.增加类属性()

print('打印新增的类属性:')     #ghk
print(类.变量)                 #ghk

 

class 念诗类():
    一首诗 = ['《卜算子》','我住长江头,','君住长江尾。','日日思君不见君,','共饮长江水。']
    
    @classmethod
    def 念诗函数(cls):
        cls.接收人 = input('请输入你想给谁念诗:')
        print('念给'+ cls.接收人 +'的诗:')
        for i in cls.一首诗:
            print(i)

念诗类.念诗函数()

类的方法直接调用其他方法举例:

①是调用类方法评级,②是在评级内部调用了类方法计算平均分,③④是类方法计算平均分的过程,最后返回的值重新赋值给了评级中的类属性平均分。

这里有个小点要注意,def 评级(cls)中的平均分和def 计算平均分(cls)的平均分,是两个不同的变量,因为它们在不同的函数下工作,作用域不同。

四、类的实例化

1.实例化:从类变成实例对象(类---->(实例化)----->实例对象)

2.“cls代表“类”的意思,self代表“实例”的意思,这样写是编码规范(程序员们的共识),但不是强制要求。”

3."当类支持实例化的时候,self是所有类方法位于首位、默认的特殊参数"

4.”类和实例的关系,就像母体和复制品的关系一样。当一个类实例化为多个实例后,实例将原封不动的获得类属性,也就是实例属性和类属性完全相等。“

5.“重写类方法”分成两个步骤:第一个步骤是在类的外部写一个函数,第二个步骤是把这个新函数的名字赋值给类.原始函数

6."我们可以通过重写类方法,让实例方法发生变化,但我们不能重写实例方法"

class 幸运():
    def 好运翻倍(self):
        print('好的,我把它存了起来,然后翻了888倍还给你:' + str(self.幸运数*888))

def 新函数(self):
    print('我是重写后的新函数!')
    print('好的,我把它存了起来,然后翻了666倍还给你:' + str(self.幸运数*666))

幸运.幸运数 = int(input('你的幸运数是多少?请输入一个整数。'))

幸运.好运翻倍= 新函数
实例 = 幸运()  # 实例化
实例.好运翻倍()

7.实例和属性的方法

①修改类的属性和方法,会影响所有实例的属性和方法

②修改某个实例的属性,只会影响这个实例本身

③不能修改实例的方法

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值