python中的“类”

1.什么是类?

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

①定义 类

就想我们用def语句来定义函数一样,我们用class来定义一个类。如:

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

②方法和属性

【方法】在类中定义的函数,调用格式:类.函数()

【属性】在类中定义的变量,调用格式:类.变量

2.类方法和类属性的组合使用

①将类中的变量传给类中的函数

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

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

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

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

这就好比类方法和类之间的约法三章,所以但凡有任何格式错误都会报错。

 另外,当类中的函数【不需要】用到类中的变量时,就不要用@classmethod、cls、cls.三处格式,否则就是占着茅坑不拉屎,终端也会给你报错。(没错,就是这么傲娇~)以下是正确的示例:

class 类A():
    变量1 = 100
    变量2 = 200

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

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

 3.给类方法传参

①类方法使用外部参数

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

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

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

②类方法使用内部参数

class 念诗类():

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

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

念诗类.念诗函数()

③类方法同时使用内部参数和外部参数

class 念诗类():

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

    @classmethod
    def 念诗函数(cls,参数):
        print('念给%s的诗:'%参数)
        for i in cls.一首诗:
            print(i)

念诗类.念诗函数('张三')

4.增加/修改类属性

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

①从外部增加/修改类属性

示例一:

变量1 = 15
#这是类外部的变量1
变量2 = 'abc'

class 类A():
    变量1 = 100
    #这是类属性变量1

变量1 = 类A.变量1
类A.变量2 = 变量2   #从外部增加/修改类属性

print(类A.变量1)
print(类A.变量2)

示例一运行结果:依次打印出100和abc

我们要区分两个变量,虽然名字相同,但是类外部的【变量1】和类属性【变量1】是两个不同的变量。变量1 = 类A.变量1是把类属性100重新赋值给了类外部的变量1,类属性变量1的值没有改变,还是100。

而类A.变量2 = 变量2,是为类A增加了一个类属性变量2,它的值等于外部的变量2也就是abc。

示例二:

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

类.变量 = input('请输入字符串:')  #从外部增加/修改类属性
类.打印类属性()

这段代码先利用input函数从外部接收了一个字符串,并通过赋值的方式保存为了类属性类.变量。然后利用类方法类.打印类属性()打印出了这个外部输入的字符串。

②从内部增加/修改类属性

class 念诗类():

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

    @classmethod
    def 念诗函数(cls):
        cls.接收人 = input('请输入你想给谁念诗:')  #从内部增加/修改类属性
        print('念给' + cls.接收人 + '的诗:')
        for i in cls.一首诗:
            print(i)

念诗类.念诗函数()

5.完整项目示例:

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

    @classmethod
    def 打印成绩单(cls):
        print(cls.学生姓名 + '的成绩单如下:')
        print('语文成绩:'+ str(cls.语文_成绩))
        print('数学成绩:'+ str(cls.数学_成绩))

    @classmethod
    def 打印平均分(cls):
        平均分 = (cls.语文_成绩 + cls.数学_成绩)/2
        print(cls.学生姓名 + '的平均分是:' + str(平均分))

    @classmethod
    def 评级(cls):
        平均分 = (cls.语文_成绩 + cls.数学_成绩)/2
        if 平均分>=90:
            print(cls.学生姓名 + '的评级是:优')
        elif 平均分>= 80 and 平均分<90 :
            print(cls.学生姓名 + '的评级是:良')
        elif 平均分>= 60 and 平均分<80 :
            print(cls.学生姓名 + '的评级是:中')
        else:
            print(cls.学生姓名 + '的评级是:差')

成绩单.录入成绩单()
成绩单.打印成绩单()
成绩单.打印平均分()
成绩单.评级()
如果没有继承的类,class语句中可以省略括号,但定义函数的def语句括号不能省!
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值