Python基础——类与对象

目录

一、两种编程思维

二、类

1.类中可以放函数和变量

 (1)用法

 (2)类方法与函数的区别

2.类方法和类属性可以组合

3.类的相关

(1)给类方法传参

(2)增加/修改类属性


一、两种编程思维

1.面向过程编程,看重的是解决问题的过程。

   面向过程编程,主要用到的是“函数”知识,将每个过程步骤打包成函数,再依次调用。

2.面向对象编程主要用到的是“类和对象”知识。

3.例:现在接到的一个需求是:做一道西红柿炒鸡蛋。

面向过程的做法:自己按照炒菜的步骤亲手制作一道西红柿炒鸡蛋。

面向对象的做法:制作一台炒菜机器人,然后告诉机器人做一道西红柿炒鸡蛋。

二、类

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

1.类中可以放函数和变量

 (1)用法

    用def语句来自定义一个函数,我们用class语句来自定义一个类。

    在类中被定义的函数被称为类的【方法】,描述的是这个类能做什么。我们使用类名.函数名()的格式,就可以让类的方法运行起来。

    在类中被定义的变量被称为类的【属性】。使用类名.变量名的格式,可以把类中的属性的值提取出来。

# 语法:创建一个名为“ClassName”的类,类名一般首字母要大写,(): 不能丢   
class ClassName():
# 如定义一个名为'狗'的类,可以写成class Dog():
    # 规范:class语句后续的代码块要缩进  
    def function1():
    # 定义类中的函数1

例1: 

class 智能机器人():
    胸围 = 33
    腰围 = 44
    臀围 = 55
    def 打招呼():
        print('主人你好!')
    def 卖萌():
        print('主人,求抱抱!')
    def 生气():
        print('主人,我要报警了!')

print('把类的属性打印出来:')
print(智能机器人.胸围)
print(智能机器人.腰围)
print(智能机器人.腰围)

智能机器人.打招呼()
智能机器人.卖萌()
智能机器人.生气()

 (2)类方法与函数的区别

    一个是它的调用格式:类.函数名()函数名()多了一个【类.】,但更重要的是,“类”中的函数可以利用“类”中的变量(也就是类方法可以调用类属性)。具体体现在第2节。

2.类方法和类属性可以组合

    为了把类中的变量传递给类中的函数,我们需要用到3个特定格式:

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

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

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

另外,当类中的函数【不需要】用到类中的变量时,就不要用@classmethodclscls.三处格式,否则就是占着茅坑不拉屎,终端也会给你报错。

'''【正确案例】'''

class 类A():
    变量1 = 100
    变量2 = 200
    
    def 函数1():  # 【不需要】使用类属性
        print('我不需要使用类属性。')
    
    @classmethod
    def 函数2(cls):  # 【需要】使用类属性
        print(cls.变量1)
        print(cls.变量2)

类A.函数1()
类A.函数2()

三.类的相关

1.给类方法传参

(1)类方法仅使用外部参数

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

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

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

 

(2)类方法仅使用内部参数

class 念诗类():
    一首诗 = ['《卜算子》','我住长江头,','君住长江尾。','日日思君不见君,','共饮长江水。']
    
    @classmethod
    def 念诗函数(cls):
        for i in cls.一首诗:
            print(i)

念诗类.念诗函数()

(3)类方法同时使用内部参数和外部参数

class 念诗类():
    一首诗 = ['《卜算子》','我住长江头,','君住长江尾。','日日思君不见君,','共饮长江水。']
    
    @classmethod
    def 念诗函数(cls,参数1):
        print('念给%s的诗:'%参数1)
        for i in cls.一首诗:
            print(i)
参数1 = input('念诗给谁听?') 
念诗类.念诗函数('张三')

当类方法要使用多个外部参数时,我们要多预设几个参数位置。比如: 

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

参数1 = int(input('请输入一个整数:'))
参数2 = int(input('请输入一个整数:'))
参数3 = int(input('请输入一个整数:'))

加100类.加100函数(参数1,参数2,参数3)

 2.增加/修改类属性

有两种途径来增加或修改类属性。一种是从内部,用类方法去增加/修改;另一种是从外部,用类.变量 = xx直接增加/修改类属性。

(1)从外部增加/修改属性

class 幸运():
    @classmethod
    def 好运翻倍(cls):
        print('好的,我把它存了起来,然后翻了888倍还给你:' + str(cls.幸运数*888))
        # 或者这样写也可以:
        # print('好的,我把它存了起来,然后翻了888倍还给你:%d' % (cls.幸运数*888))

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

(2)从内部增加/修改属性

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

念诗类.念诗函数()

3.案例

类方法不但能调用类属性,还能直接调用其他类方法。

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.学生姓名 + '的评级是:差')

成绩单.录入成绩单()
成绩单.评级()

def 评级(cls)中有一句cls.计算平均分(),这句代码可以调用类方法计算平均分(),在这个类方法中,用return语句保存了平均分,然后赋值给def 评级(cls)中的变量平均分。这里有个小点要注意,def 评级(cls)中的平均分def 计算平均分(cls)平均分,是两个不同的变量,因为它们在不同的函数下工作,作用域不同。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值