zoukankan      html  css  js  c++  java
  • 面向对象_classmethod_staticmethod

    classmethod:类方法

    主要用于改变静态属性

    class Fruit_price:
        __discount= 1
        def __init__(self,original_price):
            self.__original_price=original_price
        @property
        def price(self):
            return  self.__original_price * self.__discount
        @classmethod
        def set_discount(cls,new_discount):
            cls.__discount=new_discount
    banana=Fruit_price(5)
    orange=Fruit_price(6)
    print(orange.price)
    print(banana.price)
    Fruit_price.set_discount(0.5)
    print(Fruit_price._Fruit_price__discount)
    print(banana.price)
    print(orange.price)
    '''输出结果6
    5
    0.5
    2.5
    3.0
    '''

    注意:当改变静态属性是一定类名.方法,否则不会生效。用对象名.方法时什么影响也不会产生。

    另外,在定义方法时,cls相当与是一个类名,在定义时,一定是用cls.静态变量 来重新赋值

    staticmethon:静态方法

    static  adj:静态的  n:静电

    staticmethod 静态方法

    class method:
        d=10
        def __init__(self,num1,num2):
            self.num1=num1
            self.num2=num2
        @staticmethod
        def input1(a,b):
            c= a+b
            return c
        def sum(self):
            print(self.num1+self.num2)
            return ''
    know=method(2,3)
    method.input1(3,4)
    print(method.__dict__)
    print(know.sum())
    #输出结果

    #{'d': 10, '__dict__': <attribute '__dict__' of 'method' objects>, 'sum': <function method.sum at 0x00000000010926A8>, '__weakref__': <attribute '__weakref__' of 'method' objects>, '__doc__': None, '__module__': '__main__', '__init__': <function method.__init__ at 0x0000000001092510>, 'input1': <staticmethod object at 0x00000000010945F8>}
    #5

    在类中,@staticmethod时,此方法变独立出去,属于一个单独的定义,与类和对象没有什么关系,在类.__init__中并有找到关于c的任何信息,只有关于input1函数的一个内存地址

    关于staticmethon,classmethon方法

    两个方法的调用都是关于 类名.方法名来调用的

    staticmethod 没有默认参数

    classmethod有一个相当于类名的参数cls

  • 相关阅读:
    数据库设计中的四个范式(转)
    几个SQL
    一个整形数组,找其中第二大值
    装箱与拆箱
    继承与隐藏方法
    C++/C# 最基本的Marshal和Ptr
    C++/C#结构体转化-传string给C++
    C++/C#结构体转化-二维数组-bytes To Strings
    C# 懒人常用异步方法
    jsplumb 的初次使用
  • 原文地址:https://www.cnblogs.com/accolade/p/10513437.html
Copyright © 2011-2022 走看看