Python学习笔记-Day20-property、classmethod、staticmethod、isinstance、issubclass

今日内容

一、装饰器函数property

二、classmethod和staticmethod

三、isinstance和issunclass

 

 

 

一、装饰器函数property

property是一个装饰器函数,可以将一个方法伪装成属性

当一个方法被伪装成属性后,可以执行一个属性的增删改查(通过@方法名.setter和@方法名.deleter,下面的函数名一定要和方法名一样)

class Student:
    def __init__(self, name):
        self.__name = name
    @property
    def name(self):
        return self.__name
    @name.setter
    def name(self, new):  # 必须传入一个参数,
        if type(new)is str:
            self.__name = new
    @name.deleter
    def name(self):
        print('111')
ming = Student('小明')
print(ming.__dict__)  # {'_Student__name':'小明'}
ming.name = '小红'
print(ming.__dict__)  # {'_Student__name':'小红'}
ming.name = 123
print(ming.__dict__)  # 修改不成功,还是{'_Student__name':'小红'}
del ming.name  # 打印了111

 

二、classmethod和staticmethod

1、classmethod:类方法,只使用类中的资源(方法与self无关),且这个西元可以通过类名引用进行使用,那么这个方法应该被改为类方法

例如:修改商品的折扣不需要通过对象

class Goods:
    __discount = 0.8
    def __init__(self,name,price):
        self.name = name
        self.__price = price
    @property
    def price(self):
        return self.__price * Goods.__discount
    @classmethod
    def change_discount(cls,new):
        cls.__discount = new
apple = Goods('apple',10)
banana = Goods('banana',20)
print(apple.price)  # 8.0
Goods.change_discount(0.7)
print(apple.price)  # 7.0
print(banana.price)  #14.0

 

2、staticmethod

在某些程序中,要求全部用面向对象,则普通的函数(不需要self和cls)也要定义在类里。这时可以用 @staticmethod。也叫静态方法,静态方法可以没有默认参数,其他方法有self或cls默认参数

例如选课系统中,学生类的登录问题

class Student:
    @staticmethod
    def login():
        pass
Student.login()

总结:

类:

  静态属性:类,所有对象都统一拥有的属性

  类方法:类,如果方法涉及到操作类方法、静态属性、静态方法,那么这个方法要被改为类方法,就是在方法上加上@classmethod,有默认参数cls

  静态方法:普通方法,不使用类命名空间和对象命名空间,就是一个普通函数,定义时在函数前一行加上@ staticmethod,可以没有默认参数

  方法:对象,有默认参数self

  property方法:对象,有默认参数self

 

posted @ 2018-08-30 20:09  whuitian  阅读(106)  评论(0编辑  收藏  举报