2 Python 类,实例,静态方法
2016-09-28 19:53
211 查看
类,实例,静态方法
转载请标明出处(http://blog.csdn.net/lis_12/article/details/52693285)类与实例
类名通常由大写字母开头.实例变量
类与实例相互关联着:类是对象的定义,而实例是真正的实物.它存放了类中所定义的对象的具体信息.类既可以很简单,也可以很复杂.最简单的情况下,类仅仅用作名称空间(namespace).这样就是把数据放到了变量中,对他们按照名称空间进行分组,使得他们处于同样的关系空间中(点属性标识).
将实例与方法、变量严格绑定在了一起,没有实例的时候不能调用实例变量和方法.
构造器是最早设立实例属性的地方,因为__init__()函数是实例创建后第一个被调用的函数.
'''这个类没有任何方法和属性,只被用作名称空间容器''' class namespace(object): pass a = namespace() b = namespace() print dir(a) '''['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__'] 以上为object的属性和方法''' a.x = 10 a.y = 11 print dir(a) '''['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'x', 'y']''' #多了x,y a.x,a.y为实例属性,并不是类属性 print b.x # error,因为上述的x为实例a的实例属性,是实例a的独有属性,与b无关.
实例方法
class Test(object): def __init__(self,a): self.n = a def fun(self,a): print a,self.n t = Test(2) t.fun(1) ''' self这个参数代表实例对象本身,当用实例调用方法的时候,解释器会自动传递给方法; Test的fun函数有两个参数,第一个参数self解释器自动传的,如果函数中的参数没有self参数,该函数不能调用实例属性; self类似于c++中的this '''
类属性
类和实例读书名字空间.类是类属性的名字空间,实例则是实例属性的空间.访问属性时,首先会检测实例属性;如果未找到该属性则会在类属性中继续查找.
class Test(object): version = 1 a = Test() b = phonebook() print a.version,b.version # 1 1 a.version = 41 #相当于给a增加了一个叫version的实例属性,这样就访问不到Test.version了,a.version不再引用Test.version,此时a.version引用41 print a.version,b.version #41 1 print Test.version #1 ''' 实例属性覆盖了对类属性的引用,但是对类属性来说没有任何影响,仍然存在于类域中,还是可以通过类属性来访问 ''' Test.version = 100 #只能通过这种方式修改类属性 print a.version,b.version #41 100 del a.version #删除实例属性,然后就能访问到类属性了. print a.version,b.version # 100 100
注:类属性最好通过类属性来修改,而不要通过实例属性来修改,不然会出现意想不到的错误!!!!!
静态变量
静态属性是与他们所属的类对象绑定的,不依赖任何类实例.相当于c++中的static。ps:在python里貌似把静态变量归属于类属性里面了.
class Test(): self.a = 100 #error,因为不知道self是什么,并没有像参数一样传进来,实例属性最早是在__init__中实现 var = 1 #静态变量,前面没有self var = Test.var print var Test.var = 100 print Test.var
方法
绑定方法
存在一个实例可以调用此方法,大部分情况下,调用的都是绑定的方法,即实例方法.非绑定方法
不用实例就可以调用的方法如子类覆盖父类的构造方法
class A(B): def __init__(self): B.__init__(self)
静态方法
def Test(object): def static_fun(): print 'static' static_fun = staticmethod(static_fun)
#上述写法太low了,装饰器闪亮登场--!(装饰器待讲,先知道有这个东西....) def Test(object): @staticmethod def static_fun(): print 'static'
类方法
def Test(object): def class_fun(cls): print 'class' class_fun = classmethod(class_fun) ''' cls作为参数代表着本类 '''
def Test(object): @classmethod def class_fun(cls): print 'class'
example code
class Test(): def __init__(self): self.a = 100 def fun(self): print 'self',self.a #static_fun() error Test.static_fun() #right #cls_fun() error Test.cls_fun()#right @staticmethod def static_fun(): print 'static' #fun() error #cls_fun() error @classmethod def cls_fun(cls): print 'cls' #fun() error #static_fun() error def test(self,cls): self.fun() cls.static_fun() cls.cls_fun() if __name__ == '__main__':#主程序 a = Test() a.fun() a.static_fun() a.cls_fun() a.test(Test) ''' 上述错误大部分是因为没有传入参数self(实例),cls(类) 静态方法需要由类.fun或者实例变量.fun来调用 '''
感觉静态方法和类方法很相似啊- -只不过一个需要传递参数,一个不需要啊- -
类方法,静态方法区别
补充:找到了静态方法和类方法的区别了,直接见代码吧…#!/usr/bin/python # -*- coding: utf-8 -*- class A(object): def fun(self): print "This is A" @staticmethod def static_f(): return A() @classmethod def class_f(cls): return cls() class B(A): def fun(self): print "This is B" if __name__ == '__main__': a = B.static_f() b = B.class_f() a.fun() #This is A b.fun() #This is B raw_input()
当使用类方法和静态方法创建对象时,类方法更灵活一些…另外静态方法和类方法与实例方法存储在同一命名空间,这也是与其他面向对象语言(如ruby)的区别之一,这些语言都是将类方法与实例方法严格分开的.
相关文章推荐
- python面向对象编程(2)—— 实例属性,类属性,类方法,静态方法
- python中的实例方法、静态方法、类方法、类变量和实例变量浅析
- python 实例方法,类方法,静态方法
- Python绑定方法,未绑定方法,类方法,实例方法,静态方法
- python实例方法,类方法和静态方法
- python中类方法、类实例方法、静态方法的使用与区别
- 【Python基础】Python面向对象 - 3 - 新类,静态方法,类方法,实例方法
- Python 实例方法,类方法和静态方法
- Python Class 的实例方法/类方法/静态方法
- Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的
- python中类方法、类实例方法、静态方法的使用与区别
- python——实例方法、静态方法、类方法、类变量和实例变量浅析
- Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法
- python中类方法、类实例方法、静态方法的使用与区别
- python中的实例方法、静态方法、类方法、类变量和实例变量浅析
- python中类方法、类实例方法、静态方法的使用与区别
- python静态方法实例
- Python学习笔记——实例方法和静态方法
- Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法
- Python中类、实例和类方法、静态方法、实例方法的关系