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+" ")

#读指定行文件内容*静态方法

@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,而静态方

法无隐含参数,主要为了类实例也可以直接调用静态方法

 

 

原文地址:https://www.cnblogs.com/zyy98877/p/8536869.html