类的属性

变量在类中称为类的属性,函数在类中称为类的方法,类的属性分为以下几种:

(1) 公有属性:在类中和类外都能调用的属性,定义的时候与变量的定义一致,如 color = 'yellow' (2) 私有属性:不能在类外及被类以外的函数调用,定义的时候以双下划线开头,如__color = 'yellow'

(3) 内置属性: 由系统在定义类的时候默认添加的,定义的时候以前后双下划线构成,如 dict

#!/usr/bin/env python
class People(object):
    color = 'yellow'         # 定义类的公有属性
		
    __age = 30               # 定义类的私有属性
		
    def think(self):
        print self.__age     # 只能在类里面调用私有属性
				
ren = People()
print ren.color              # 可以在类外面调用公有属性
ren.think()
print ren.__dict__           # 系统已经定义好了内置属性,可以直接调用

类的方法

变量在类中称为类的属性,函数在类中称为类的方法,类的方法分为以下几种:

(1) 公有方法:在类中和类外都能调用的方法 (2) 私有方法:只能在类里面被调用,不能被类的外部调用,定义的时候要在前面加上双下划线,如 def __think()

备注:定义方法的时候后面都有一个self,如:def think(self);就是区别类方法和函数(不需要self),里面有self是作为函数的第一个参数

(3) 类方法:能被类直接调用的方法称为类方法,但要通过 classmethod() 函数处理后才能被类直接调用 (4) 静态方法:静态方法相当于全局函数,可以被类直接调用,但要通过 staticmethod() 处理后才能被直接调用,注意静态方法没有 self 参数 区别:@classmethod与@staticmethod 前者是类方法,后者是静态方法,共同点是都可以使用类的名字来调用这个方法。 不同点是两种方法的定义不同,前者必须有个self参数,后者可以没有参数,类方法也叫做动态方法,在调用类方法的时候,其他方法不会被加载到内存,调用静态方法是,其他方法也会一起被加载到内存。 self就表示类的本身。 类方法里必须使用self作为参数,这样才能被类识别为是自己的一个方法。 没有self就是一个函数,这时类是不能调用它的,除非使用@staticmethod这个装饰器,类才能调用它。

实例:

#!/usr/bin/env python

class People(object):
    color = 'yellow'
    __age = 30
    def __talk(self):         # 定义私有方法,需要在前面添加双下划线
        print "I am talking with Tom"
    def test(self):           # 定义公有方法,方法的定义和函数一样,但是需要 self 作为第一个参数,表示执行对象本身
        self.__talk()         # 在类的内部调用私有方法

jack = People()
jack.test()
#!/usr/bin/env python

class People(object):
    color = 'yellow'
    __age = 30

    def test(self):               # 定义公有方法
        print "Testing......"

    cm = classmethod(test)        # 通过 classmethod 函数转换成类方法

jack = People()
People.cm()                       # 公有方法是不可以通过类直接调用的,只能通过对象来调用,但转换成类方法之后,就可以通过类直接调用
#!/usr/bin/env python

class People(object):
    color = 'yellow'
    __age = 30

    def test():                   # 在类中定义方法如果没有加 self 参数只能称其为函数
        print "Testing......"

    sm = staticmethod(test)       # 通过 staticmethod 函数转换成静态方法

jack = People()
People.sm()                       # 静态方法可以通过类直接调用

可以参考以下代码:

class People(object):
    color='yellow'              #类的属性
    __age=30                    #私有属性
    def A(self):                #公有方法
        self.color='black'
        print 'I am a %s' %self.color
    def test(self):
        self.A()                #类里面调用
        print self.__age        #调用私有属性

    def __think(self):
        print 'this is private mathod'

    def call(self):             #调用私有方法
        self.__think()

    @classmethod                #只对下面的一个函数起作用
    def classMethod(self):
        print 'This is classMethod'
				
		 @classmethod
    def call_class(self):       #动态函数调用类的属性
        print self.color

    def B(self):                #通过动态方法对这个方法B不起作用,只能用实例化的类调用
        print 'B'

    @staticmethod               #只对下面的一个函数起作用
    def staticMetod():
        print 'This is staticMethod'

pe=People()
pe.A()
pe.test()
pe.call()
People.classMethod()
People. call_class()
People.staticMetod()
pe.B()
结果:
I am a black
I am a black
30
this is private mathod
This is classMethod
yellow
This is staticMethod
B

类的内置方法

所谓内部类,就是在类的内部定义的类,主要的目的是为了更好的抽象现实世界

class People(object):
    color='yellow'

    class Chinese(object):
        print 'I am a chinese'
        name='test'


#第一种方法:
pe=People()
jack=pe.Chinese()
print jack.name

#第二种方法调用属性name1:
print People.Chinese.name
结果:
I am a chinese
test
test

实例:

class People(object):
    color='yellow'

    def __str__(self):              #通过这个函数可以知道pe是做什么的,只能用return,不能用print
        return 'pe is People class'

    def __init__(self):             #将类的属性更改,调用的结果就是green,但是使用类调用属性则不变
        self.color='green'
        print 'this is init'        #初始化方法可以不用调用,最开始的时候直接就执行了

    class Chinese(object):
        print 'I am a chinese'
        name='test'


pe=People()
print pe
print pe.color
print People.color

结果:

I am a chinese
this is init
pe is People class
green
yellow

实例2:可以设置初始化的默认参数

结果:

初始化函数时可以调用方法:

del 用于释放对象所占用的资源,注意 del 是在脚本要退出之前执行的 class People(object): color = 'yellow'

def __init__(self):
    self.fd = open('/etc/passwd')    # 我打开了一个文件

def __del__(self):
    self.fd.close()                  # 可以在__del__中关掉这个文件

ren = People()