python 类方法、实例方法、静态方法测试总结

1)实例方法隐含的参数 self 为类实例,而类方法隐含的参数 cls 为类本身;
2)逻辑上类方法应当只被类调用,实例方法实例调用,静态方法两者都能调用;
3)静态方法无隐含参数,主要为了类实例也可以直接调用静态方法;
4)静态含数带有 cls 或 self 参数传递类、类实例,可对类变量或类属性进行修改;
5)实例变量是对于每个实例都独有的数据,而类变量是该类所有实例共享的属性和方法;
6)通过对类实例对类变量进行修改(通过实例方法或则带 self 参数的静态函数)后,该实例的类变量只能通过类实例进行修改,类方法修改类变量对该实例无效;

代码详解:

#!/usr/bin/python3


class Fruit:
    discount = 1;  # 类变量

    def __init__(self, name, price, number):
        self.price = price  # 实例变量
        self.name = name
        self.count = number

    def finalPrice(self):
        print('%s price:%.1f count:%d' %(self.name, self.price * self.discount, self.count))

    def setDiscount(self, discount, number):
        self.discount = discount  # 必须带self.,否则认为是新变量
        self.count = number

    @classmethod
    def setClassDiscount(cls, discount, number):
        cls.discount = discount
        cls.count = number

    @staticmethod
    def setStaticDiscount(self, discounts, number):
        # self.discount = discounts
        self.setDiscount(discounts,number)
        # setDiscount(discounts)  # 编译器报错
        # discount = discounts   # 编译器不报错,但会以为discount是方法内新创建的变量


apple = Fruit('apple', 10, 200)
banana = Fruit('banana', 4, 150)
apple.finalPrice()
banana.finalPrice()
print('*************************')
apple.setDiscount(0.9, 190)
apple.finalPrice()  # apple price:9.0 count:190
banana.finalPrice()  # banana price:4.0 count:150
fruit1 = Fruit('fruit1', 12, 200)
fruit1.finalPrice()  # fruit1 price:12.0 count:200
print('*************************')
Fruit.setClassDiscount(0.8, 180)
apple.finalPrice()  # apple price:9.0 count:190
banana.finalPrice()  # banana price:3.2 count:150
fruit2 = Fruit('fruit2', 12, 200)
fruit2.finalPrice()  # fruit2 price:9.6 count:200
print('*************************')
Fruit.setStaticDiscount(apple, 0.5, 140)
apple.finalPrice()  # apple price:5.0 count:140
banana.finalPrice()  # banana price:3.2 count:150
fruit3 = Fruit('fruit3', 12, 200)
fruit3.finalPrice()  # fruit3 price:9.6 count:200
print('*************************')
banana.setStaticDiscount(banana, 0.5, 120)
apple.finalPrice()  # apple price:5.0 count:140
banana.finalPrice()  # banana price:2.0 count:120
fruit4 = Fruit('fruit4', 12, 200)
fruit4.finalPrice()  # fruit4 price:9.6 count:200
print('*************************')
Fruit.setClassDiscount(0.2, 110)
apple.finalPrice()  # apple price:5.0 count:140
banana.finalPrice()  # banana price:2.0 count:120
fruit5 = Fruit('fruit5', 12, 200)
fruit5.finalPrice()  # fruit5 price:2.4 count:200
print('*************************')
banana.setStaticDiscount(banana, 0.1, 110)
apple.setStaticDiscount(apple, 0.1, 110)
apple.finalPrice()  # apple price:1.0 count:110
banana.finalPrice()  # banana price:0.4 count:110
pear = Fruit('pear', 6, 300)
pear.finalPrice()  # pear price:1.2 count:300
print('*************************')

输出结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值