zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    扩展问题
    oracle数据类型及其隐式转换 (摘,转载)
    oralce中to_char默认转换格式的理解
    oracle的to_char中的fm(转,摘录)
    Oracle中TO_DATE TO_CHAR格式(转,摘录)
    ZT Abstract Factory
    ZT Factory Pattern
    Singleton
    几本电子书比较
    名词后变为复数+s,或者+es等怎么读
  • 原文地址:https://www.cnblogs.com/tian-tian/p/9562447.html
Copyright © 2011-2022 走看看