zoukankan      html  css  js  c++  java
  • python面向对象-3类的静态方法和类方法

    还是以上次的洗衣机例子:

     1 class Washer:
     2     company='ZBL'
     3     def __init__(self,water=10,scour=2):
     4         self._water=water #不想让用户直接访问实例变量,可以标志成私有
     5         self.scour=scour
     6         self.year=2000#这是生产日期
     7         #属性包装,将water属性包装成方法,用户使用water时实际是访问的方法
     8     @staticmethod #定义一个静态方法
     9     def spins_ml(spins):
    10         return spins*0.4
    11         print('company:',Washer.company)
    12         #print('year:',self.year)#错误,静态方法不能使用实例属性
    13     
    14     @property
    15     def water1(self):#如果用户使用 实例.water相当于访问这个方法,而不是真的访问属性
    16         return self._water
    17     
    18     @water1.setter
    19     def water1(self,water):
    20         if 0<water<=500:
    21             self._water=water
    22         else:
    23             print('set Failure!')
    24     @property
    25     def total_year(self):
    26         return 2017-self.year
    27     
    28     def set_water(self,water):
    29         self.water=water        
    30 
    31     def set_scour(self,scour):
    32         self.scour=scour        
    33 
    34     def add_water(self):
    35         print('Add water:',self._water)
    36 
    37     def add_scour(self):
    38         print('Add scour:',self.scour)
    39 
    40     def start_wash(self):
    41         self.add_water()
    42         self.add_scour()
    43         print('Start wash...')
    44         
    45 if __name__=='__main__':
    46     print(Washer.spins_ml (8))
    47     w=Washer()
    48     print(w.spins_ml(8))
    49     w=Washer(200,Washer.spins_ml(8))
    50     w.start_wash()

    输出结果:


    下面讲类方法:

     1 class Washer:
     2     company='ZBL'
     3     def __init__(self,water=10,scour=2):
     4         self._water=water #不想让用户直接访问实例变量,可以标志成私有
     5         self.scour=scour
     6         self.year=2000#这是生产日期
     7         #属性包装,将water属性包装成方法,用户使用water时实际是访问的方法
     8     @staticmethod #定义一个静态方法
     9     def spins_ml(spins):
    10         return spins*0.4
    11         print('company:',Washer.company)
    12         #print('year:',self.year)#错误,静态方法不能使用实例属性
    13     @classmethod
    14     def get_washer(cls,water,scour):#cls相当于实例方法中的self,调用是不用提供这个参数
    15         return cls(water,cls.spins_ml(scour))#cls代表类名Washer,故不是硬编码(改类名是不用改cls,若cls用类名代替也对,但若改类名这个地方也需要改动)
    16     
    17     @property
    18     def water1(self):#如果用户使用 实例.water相当于访问这个方法,而不是真的访问属性
    19         return self._water
    20     
    21     @water1.setter
    22     def water1(self,water):
    23         if 0<water<=500:
    24             self._water=water
    25         else:
    26             print('set Failure!')
    27     @property
    28     def total_year(self):
    29         return 2017-self.year
    30     
    31     def set_water(self,water):
    32         self.water=water        
    33 
    34     def set_scour(self,scour):
    35         self.scour=scour        
    36 
    37     def add_water(self):
    38         print('Add water:',self._water)
    39 
    40     def add_scour(self):
    41         print('Add scour:',self.scour)
    42 
    43     def start_wash(self):
    44         self.add_water()
    45         self.add_scour()
    46         print('Start wash...')
    47         
    48 if __name__=='__main__':
    49 ##    print(Washer.spins_ml (8))
    50 ##    w=Washer()
    51 ##    print(w.spins_ml(8))
    52 ##    w=Washer(200,Washer.spins_ml(8))
    53 ##    w.start_wash()
    54     w=Washer.get_washer(100,9)#类名.类方法名
    55     w.start_wash()

    -----------------------

    做个作业吧。

  • 相关阅读:
    快速幂模板
    部分有关素数的题
    POJ 3624 Charm Bracelet (01背包)
    51Nod 1085 背包问题 (01背包)
    POJ 1789 Truck History (Kruskal 最小生成树)
    HDU 1996 汉诺塔VI
    HDU 2511 汉诺塔X
    HDU 2175 汉诺塔IX (递推)
    HDU 2077 汉诺塔IV (递推)
    HDU 2064 汉诺塔III (递推)
  • 原文地址:https://www.cnblogs.com/zhubinglong/p/6947718.html
Copyright © 2011-2022 走看看