Python初学之类的方法

来源:互联网 发布:淘宝的试用报告怎么写 编辑:程序博客网 时间:2024/05/22 05:25

实例对象的公有方法和私有方法:公有方法通过对象名直接调用,私有方法不可以,只能在属于对象的方法中通过self调用,或者在外部通过Python支持的特殊方法调用。如果通过类名来调用时属于对象的公有方法,需要显示地为该方法的self参数传递一个对象名,用来明确指定访问那个对象的数据成员。静态方法和类方法都可以通过对象名和类名调用,但不能直接访问属于对象的数据成员,只能访问属于类的成员。一般用cls作为类方法 的第一个参数名称,但是也可以使用其他的名字作为参数,并且调用类方法时不需要为改参数传递值。


在构造函数中,程序对公有变量设置了初始值(初始化),可以在构造函数中使用参数,通常使用参数来设置成员变量(特别是私有变量)的值。

术语解释:实例变量 = 实例属性=实例对象的属性 = 成员变量 ;类变量 = 类属性

(1)静态方法

静态方法无须传入self参数,因此静态方法无法访问实例变量;静态方法中不可以直接访问类的静态变量,但可以通过类名引用静态变量。

所以静态方法与定义它的类没有直接关系,类似函数工具库。可以通过类和实例对象访问静态方法,二者无区别。

(2)类方法

类方法有一个cls参数,代表定义类方法的类,可以通过cls访问类的静态变量。

class myclass:

    vall = 'string'

    def __init__(self):

        self.a1 = 'a'

    @classmethod

    def classmd(cls):

    print str(cls),cls.vall#无法访问a1的值


myclass.classmd()

c = mylass()

c.classmd()





 class Root:

__root = 0

def __init__(self,a):

self.__a = a

Root.__root +=1

def show(self):

print self.__a,self.__root

@classmethod

def classmd(cls):

print cls.__root#类方法

@staticmethod

def staticmd():

print Root.__root#静态方法

结果如下:

>>> r = Root(1)#创建实例对象r

>>> r.classmd()#通过对象名调用类方法

1

>>> r.staticmd()#通过对象名调用静态方法

1

>>> r.show()#通过对象名调用实例对象方法

1 1

>>> Root.classmd()#通过类名调用类方法

1


>>> Root.staticmd()#通过类名调用静态方法

1

>>> Root.show()#试图调用实例对象方法,失败。



Traceback (most recent call last):

  File "<pyshell#160>", line 1, in <module>

    Root.show()

TypeError: unbound method show() must be called with Root instance as first argument (got nothing instead)

>>> Root.show(r)#通过类名调用势力对象方法时为self显示传对象名。

1 1

>>> r.show()

1 1

>>> rr = Root()



Traceback (most recent call last):

  File "<pyshell#163>", line 1, in <module>

    rr = Root()

TypeError: __init__() takes exactly 2 arguments (1 given)

>>> rr = Root(4)

>>> r.show()

1 2

>>> rrr = Root(5)

>>> r.show()

1 3

>>> Root.show(rr)

4 3

>>> Root.show(rrr)

5 3

原创粉丝点击