python面向对象之方法
类成员:字段+方法+属性
字段:普通(实例对象,每个对象保存一次)+静态(全局变量,只保存一次,所有方法共享)
方法:普通方法(实例方法:self.fun())+类方法(@classmathod)+静态方法(所有方法分类)
属性:方法属性
#1普通方法:(使用较多)
#encoding=utf-8
class Foo:
def __init__(self, name):
self.name = name
def ord_func(self):
""" 定义普通方法,至少有一个self参数 """
# print self.name
print u'普通方法'
#2类方法:(不能使用实例)
@classmethod
def class_func(cls):
""" 定义类方法,至少有一个cls参数 """
print u'类方法'
#3静态方法:(将分类)(不能使用实例)
@staticmethod
def static_func():
""" 定义静态方法 ,无默认参数"""
print u'静态方法'
# 调用普通方法:实例+.+方法
f = Foo("gloryroad")
f.ord_func()
# 调用类方法:类+.+方法
Foo.class_func()
# 调用静态方法:
Foo.static_func()
实例:
将两个文件操作方法,一个改成类方法,一个改成静态方法,再加上实例方法,读取文件全部
#coding=utf-8
class rw(object):
#构造函数--构造实例的函数,不能被类方法或者静态方法引用参数
# def __init__(self,mydir):
# self.mydir=mydir
#追加写文件*类方法
@classmethod
def w(cls,path,content):
with open(path.decode("utf-8"),"a") as fp:
fp.write(content+"\n")
#读指定行文件内容*静态方法
@staticmethod
def r(path,linenum):
lineno=0
with open(path.decode("utf-8"),"r") as f:
for line in f:
lineno+=1
if linenum==lineno:
return line
return ""
fh=rw("e:\\a.txt")
rw.w("e:\\a.txt","hezyy")
print rw.r("e:\\a.txt",2)
三个方法区别:
类方法可以被类对象或实例调用,实例方法只能被实例调用,它
只属于类的单个实例拥有,静态方法两者都能调用,它在类和实
例间共享。Python实现了一定的灵活性使得类方法和静态方法,
都能够被实例和类二者调用。
所以三者主要区别在于参数传递上的区别,实例方法隐含传的参
数是类实例self,而类方法隐含传递的参数是类本身cls,而静态方
法无隐含参数,主要为了类实例也可以直接调用静态方法