python面向对象-3类的静态方法和类方法

还是以上次的洗衣机例子:
class Washer:
company='ZBL'
def __init__(self,water=10,scour=2):
self._water=water #不想让用户直接访问实例变量,可以标志成私有
self.scour=scour
self.year=2000#这是生产日期
#属性包装,将water属性包装成方法,用户使用water时实际是访问的方法
@staticmethod #定义一个静态方法
def spins_ml(spins):
return spins*0.4
print('company:',Washer.company)
#print('year:',self.year)#错误,静态方法不能使用实例属性 @property
def water1(self):#如果用户使用 实例.water相当于访问这个方法,而不是真的访问属性
return self._water @water1.setter
def water1(self,water):
if 0<water<=500:
self._water=water
else:
print('set Failure!')
@property
def total_year(self):
return 2017-self.year def set_water(self,water):
self.water=water def set_scour(self,scour):
self.scour=scour def add_water(self):
print('Add water:',self._water) def add_scour(self):
print('Add scour:',self.scour) def start_wash(self):
self.add_water()
self.add_scour()
print('Start wash...') if __name__=='__main__':
print(Washer.spins_ml (8))
w=Washer()
print(w.spins_ml(8))
w=Washer(200,Washer.spins_ml(8))
w.start_wash()
输出结果:

下面讲类方法:

class Washer:
company='ZBL'
def __init__(self,water=10,scour=2):
self._water=water #不想让用户直接访问实例变量,可以标志成私有
self.scour=scour
self.year=2000#这是生产日期
#属性包装,将water属性包装成方法,用户使用water时实际是访问的方法
@staticmethod #定义一个静态方法
def spins_ml(spins):
return spins*0.4
print('company:',Washer.company)
#print('year:',self.year)#错误,静态方法不能使用实例属性
@classmethod
def get_washer(cls,water,scour):#cls相当于实例方法中的self,调用是不用提供这个参数
return cls(water,cls.spins_ml(scour))#cls代表类名Washer,故不是硬编码(改类名是不用改cls,若cls用类名代替也对,但若改类名这个地方也需要改动) @property
def water1(self):#如果用户使用 实例.water相当于访问这个方法,而不是真的访问属性
return self._water @water1.setter
def water1(self,water):
if 0<water<=500:
self._water=water
else:
print('set Failure!')
@property
def total_year(self):
return 2017-self.year def set_water(self,water):
self.water=water def set_scour(self,scour):
self.scour=scour def add_water(self):
print('Add water:',self._water) def add_scour(self):
print('Add scour:',self.scour) def start_wash(self):
self.add_water()
self.add_scour()
print('Start wash...') if __name__=='__main__':
## print(Washer.spins_ml (8))
## w=Washer()
## print(w.spins_ml(8))
## w=Washer(200,Washer.spins_ml(8))
## w.start_wash()
w=Washer.get_washer(100,9)#类名.类方法名
w.start_wash()

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

做个作业吧。
python面向对象-3类的静态方法和类方法的更多相关文章
- Python - 面向对象编程 - 实例方法、静态方法、类方法
实例方法 在类中定义的方法默认都是实例方法,前面几篇文章已经大量使用到实例方法 实例方法栗子 class PoloBlog: def __init__(self, name, age): print( ...
- Python 面向对象之一 类与属性
Python 面向对象之 类与属性 今天接触了一下面向对象,发现面向对象和之前理解的简直就是天壤之别,在学Linux的时候,一切皆文件,现在学面向对象了,so,一切皆对象. 之前不是一直在学的用面向函 ...
- Python面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系
Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 2. 类与对象之间 ...
- python类的静态方法和类方法区别
先看语法,python 类语法中有三种方法,实例方法,静态方法,类方法. # coding:utf-8 class Foo(object): """类三种方法语法形式&q ...
- python 面向对象和类成员和异常处理
python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...
- python面向对象(二)——类成员
Python面向对象 类成员 1.字段 普通字段 属于对象 静态字段 属于类 2.方法 普通方法 触发者是对象 括号里至少一个参数 se ...
- python 面向对象(类)--学习笔记
面向对象是一种编程方式, 主要集中在类和对象的两个概念 python 中的类符合封装, 继承, 多态的特征 类 是一个模板, 是n多函数的集成 对象 是类的实例化 类的成员分为三大类:字段.方法.属性 ...
- python学习日记(OOP——静态方法和类方法)
classmethod 类方法在Python中使用比较少,类方法传入的第一个参数为cls,是类本身.并且,类方法可以通过类直接调用,或通过实例直接调用.但无论哪种调用方式,最左侧传入的参数一定是类本身 ...
- python面向对象之 类
内容梗概: 1. 类的成员 2. 类的成员-变量 3. 类的成员-方法 4. 类的成员-属性 5. 私有 1.类的成员class 类名: 方法 def __init__(self, 参数1, 参数2. ...
随机推荐
- 机器学习入门-随机森林预测温度-不同参数对结果的影响调参 1.RandomedSearchCV(随机参数组的选择) 2.GridSearchCV(网格参数搜索) 3.pprint(顺序打印) 4.rf.get_params(获得当前的输入参数)
使用了RamdomedSearchCV迭代100次,从参数组里面选择出当前最佳的参数组合 在RamdomedSearchCV的基础上,使用GridSearchCV在上面最佳参数的周围选择一些合适的参数 ...
- Python之实例对象的增删改查
#实例对象的增删改查p1 = ChinesePeople('wangyue')#print (p1.__dict__) #查看实例对象的属性#print (p1.name)(p1.play_ball( ...
- Nginx 错误汇总
1. Upstream timed out (110: Connection timed out) while reading response header from upstream 这种情况主要 ...
- ICE中间件相关
Ice 是 网络通信引擎 Internet Communications Engine 的简称,是ZeroC开发的一个面向对象的中间件平台.它提供了面向对象的远程过程调用.网格计算和发布/订阅功能,并 ...
- 安装oracle后java -version命令显示 jdk version "1.3.1"的原因
因为先装的JDK,后装了oracle,oracle的JDK配置把原来的jdk路径替换掉了. 我的电脑->属性->高级->环境变量->系统变量->PATH ,把JDK的路径 ...
- 最短路径-Floyd算法(转载)
暑假,小哼准备去一些城市旅游.有些城市之间有公路,有些城市之间则没有,如下图.为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程. 上图中有 ...
- Linux下tar.gz 安装
将安装文件拷贝至你的目录中 如果是以root身份登录上的,就将软件拷贝至/root中. cp xxx.tar.gz /root 解压缩包 tar xvzf xxx.tar.gz 切换到安装目录下 cd ...
- oracle杀掉执行的死循环存储过程
select * from v$db_object_cache where locks > 0 and pins > 0 and type='PROCEDURE'; select b.si ...
- 第八章 高级搜索树 (a2)伸展树:双层伸展
- OpenCL、OpenGL、OpenAL
一:OpenCL (全称Open Computing Language,开放运算语言)是第一个面向异构系统通用目的并行编程的开放式.免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器 ...