一.关于特殊属性(property)。

接着上一篇文章继续说,如果想调用python中一个对象的属性,直接使用类或者对象名称在后面加.点然后写上属性名称就可以跳用这个类或者对象的属性了,比如说像下面这样。

class person:

    def __init__(self,career):

        self.career = career

ayumi = person(career="diva")

print ayumi.career #ayumi是实例化出来的一个对象后面加.点,后面接属性名,就是直接调用这个对象的career属性。

上面说的是调用一个对象的属性,那么特殊属性到底是什么?

所谓的特殊属性,就是以访问对象属性的方式去执行一个对象中的一个函数。

举个例子:

class person:
    def __init__(self,career):
        self.career = career
    @property   
    def show_carrer(self):
        return self.career
ayumi = person("diva")

print ayumi.show_carrer   #show_carrrer本身是个函数,需要在后面加括号才可以执行,但是现在使用了调用对象属性的方法执行了这个函数。


#解释一下,@property是python内置的一个装饰器,被这个装饰器“装饰”过的函数(方法),在通过对象去调用的时候,直接可以以调用属性的方式去执行这个函数。


二.关于类方法(classmethod)。

类方法就是在类中定义了一个方法,想调用这个方法的时候无需生成任何对象,直接通过类就调用的函数就是类方法。

举个例子~:

class num:
    count = 0
    def __init__(self):
        num.count += 1
    def __del__(self):
        num.count -= 1
    @classmethod
    def show_count(cls):  《-----注意!!这里传入的不再是一个对象,而是一个类!!
        return num.count
a = num()
b = num()
print num.show_count()


#@classmethod 也是python内置的一个装饰器,用于将类中的一个函数变为类可以直接调用的函数,无需实例化出任何对象。



三. 关于静态方法(staticmethod)。

什么是静态方法?

静态方法就是在一个类里面定义的一个普通函数,但是这个函数不与类和对象有任何的绑定关系,这个函数无法访问对象中的任何属性,也不能访问类中的任何属性,但是这个函数既可以通过类去调用,也可以通过对象去调用,这种放在类里面,但是又与类没什么关系的函数就是静态方法。

import time
class num:
    count = 0
    def __init__(self):
        num.count += 1
    def __del__(self):
        num.count -= 1
    @classmethod
    def show_count(self):
        return num.count
    @staticmethod  #定义静态方法
    def dis_time():
        return time.localtime()
a = num()
b = num()
print b.dis_time() #通过对象调用静态方法。
>>>time.struct_time(tm_year=2017, tm_mon=4, tm_mday=2, tm_hour=16, tm_min=17, tm_sec=36, tm_wday=6, tm_yday=92, tm_isdst=0)
print num.dis_time() #通过类来调用静态方法。
>>>time.struct_time(tm_year=2017, tm_mon=4, tm_mday=2, tm_hour=16, tm_min=17, tm_sec=36, tm_wday=6, tm_yday=92, tm_isdst=0)

从上面这段例子就可以看出,静态方法只是在名义上归属一个类或者对象,但是没有办法访问任何类属性和实例属性。