一.关于特殊属性(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)
从上面这段例子就可以看出,静态方法只是在名义上归属一个类或者对象,但是没有办法访问任何类属性和实例属性。