面向对象:calssmethod、staticmethod、isinstance、issubclass

classmethod:类方法,把一个方法变成一个类中的方法,这个方法就直接可以被类调用,不需要依托任何对象
什么时候用:当这个方法的操作只涉及静态属性的时候,就应该使用classmethod来装饰这个方法
class Fruit_store:
    __discount = 0.5
    def __init__(self,name,price):
        self.name = name
        self.__price = price
    @property
    def price(self):
        return self.__price*self.__discount

    # def change_discount(self,new_discount):
    #     self.__discount = new_discount
    @classmethod  #定义类方法,self变成cls
    def change_discount(cls,new_discount):
         cls.__discount = new_discount


apple = Fruit_store('apple',12.8)
print(apple.price)
# Fruit_store.change_discount(apple,0.8)
# apple.change_discount(0.8)#如果不定义类方法,需要用对象调用
Fruit_store.change_discount(0.8)
apple.change_discount(0.8)#静态方法同样可以被对象调用,但不推荐
print(apple.price)
staticmethod:静态方法,没有默认参数
  在完全面向对象的程序中,如果一个函数既和对象没有关系 也和类没有关系 那么就用staticmethod将这个函数变成一个静态方法
class Longin:
    def __init__(self,usr,pwd):
        self.usr = usr
        self.pwd = pwd
    def login(self):pass


    @staticmethod
    def func():
        usr = input('请输入姓名')
        pwd = input('请输入密码')
        return Longin(usr,pwd)

aike = Longin.func()
print(aike.pwd)

 注意:类方法操作涉及静态属性的时候,他的操作对当前类的作用域有效,会影响所有调用该静态属性的方法。使用时需要注意self应该变为cls。

 

isinstance、issubclass

# isinstance(obj,cls)检查是否obj是否是类 cls 的对象
# issubclass(sub, super)检查sub类是否是 super 类的派生类
class A:
    pass
class B:
    pass

class C(A):
    pass

a = A()
print(isinstance(a,A))
print(isinstance(a,B))

print(issubclass(C,A))

#打印:
True
False
True

 

 

 

转载于:https://www.cnblogs.com/aizhinong/p/11475697.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值