Python——属性和方法

来源:互联网 发布:c语言学会了可以干吗 编辑:程序博客网 时间:2024/06/07 00:40

一、property函数
学过Java的朋友应该对Java中类的属性和方法不会感到陌生,在Python中也一样,类中定义的属性方法(在没有增加访问限制的情况下)都可以通过实例化的队形进行访问,如下:

# _*_ coding:utf-8 _*_class A:    def __init__(self):        self.w=0        self.h=0    def getWH(self):        return self.w,self.h    def setWH(self,size):        self.w,self.h=size运算结果:===========RESTART: C:\Users\Mr_Deng\Desktop\test.py===========>>> testA=A()>>> testA.getWH()(0, 0)>>> testA.setWH([10,20])>>> testA.getWH()(10, 20)>>> 

就像上面一样在没有对属性和方法进行访问权限控制的情况下,可以通过实例化的对象访问类中的属性和方法。这里先介绍一个函数:Property,该函数可以将类中的定义的方法当做参数,如下:

# _*_ coding:utf-8 _*___metaclass__=typeclass A:    def __init__(self):        self.w=0        self.h=0    def getWH(self):        return self.w,self.h    def setWH(self,size):        self.w,self.h=size    size=property(getWH,setWH)运算结果:===========RESTART: C:\Users\Mr_Deng\Desktop\test.py===========>>> testA=A()>>> testA.size(0, 0)>>> testA.size=11,22>>> testA.size(11, 22)>>> 

注:property函数可以用0,1,2,3或者4个参数来调用,若果没有参数,产生的属性既不可以读也不可以写。property函数四个参数分别是fget、fset、fdel、doc。在上面的例子中,将getWH和setWH函数作为property函数的两个参数并将property函数创建的属性赋给size,通过这种方法,可以使得对类中的操作变得像访问属性一样。
二、静态方法和类成员方法
在python中静态方法和类成员方法的区别主要在于,静态方法定义中没有self参数,能够被类本身直接调用。类方法定义时需要名为cls的参数,类成员方法可以直接用类的具体对象调用。静态方法和类成员方法的定义和使用如下:

__metaclass__=typeclass MyClass:    def smethod():        print('This is a static method')    smethod=staticmethod(smethod)    def cmethod(cls):        print('This is a class method',cls)    cmethod=classmethod(cmethod)

或者:

# _*_ coding:utf-8 _*___metaclass__=typeclass MyClass:    @staticmethod    def smethod():        print('This is a static method')    @classmethod    def cmethod(cls):        print('This is a class method',cls)运算结果:===========RESTART: C:\Users\Mr_Deng\Desktop\test.py===========>>> MyClass.smethod()This is a static method>>> MyClass.cmethod()This is a class method <class '__main__.MyClass'>>>> 

三、setattr、getattribute、setatr函数

__getattribute__(self,name):当特性为name被访问时自动被调用__getattr__(self,name):当特性name被访问且对象没有想用的特性时被自动调用。__setatr__(self,name,value):给特性那么赋值时自动调用。__delattr__(self,name):删除name时自动调用。

案例如下:

# _*_ coding:utf-8 _*_class AA:    def __init__(self):        self.w=0        self.h=0    def __setattr__(self,name,value):        if name=='test':            self.w,self.h=vaule        else:            self.__dict__[name]=value    def __getattr__(self,name):        if name=='test':            return self.w,self.h        else:            raise AttributeError
0 0