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. ...
随机推荐
- 创建类type (底层代码)
类的创建时是用type 实现的 def __init__(self, name): self.name = name def fun(self): print("%s is talking' ...
- java常用的Utils写法
Utils: 获取年龄 属性文件获取 BeanCopy 分页 MapUtils 获取年龄: /** * 根据传入的日期计算年龄,因时间戳是从1970年开始计算的 * @param date * ...
- eclipse Jsp 自创建tags问题
Can not find the tag directory "/WEB-INF/tags" 网上的说法有三种情况: 1. jsp2.0开始支持自定义tag,因此 web.xml文 ...
- cobbler配置解析
1.Cobbler命令说明: 命令名称 命令用途 cobbler check 检查cobbler配置 cobbler list 列出所有的cobbler元素 cobbler report 列出元素的详 ...
- TCP/IP知识总结(TCP/IP协议族读书笔记三)
接下来,总结传输层的两大协议UDP和TCP. 一.UDP(用户数据报协议) 讲UDP之间,先了解两个概念:有连接和无连接. 有连接:通信之前,通信双方必须建立一条通道: 无连接:不需要建立通道,发送方 ...
- Scala语言学习笔记(4)
高阶函数 // 高阶函数 map val salaries = Seq(20000, 70000, 40000) val doubleSalary = (x: Int) => x * 2 val ...
- mysql mapper中增删查改
//1.增 public int insert(Port port) ; //2.删 public int deleteM(String id);//3.改 public int update(Por ...
- PR合并回写
) as LGORT ,'SAPRFC' as ERNAM,out_pr.due_datetime,out_pr.so_id,out_pr.so_lineid,out_pr.sobsl from V_ ...
- 引用mvvmlight dll ,操作command
前言 因为vs2010没有集成mvvmlight 所以想要使用mvvmlight的relaycomman需要引用dll 需要测试某个功能的时候,不能进行快带的集成 引用mvvmlight dll 如果 ...
- java重载(实现同一方法名,不同参数)
背景: 前几天写连接数据库时,因为要执行sql,有的是指向得到所有的执行结果,有的是想根据执行结果获得某一个字段的结果.这时我想通过同一个方法名,不同的参数,获得不同的结果.结果发现java的方法竟 ...