8.python之面相对象part.2(特殊属性,类方法,静态方法)

  1. 云栖社区>
  2. 博客>
  3. 正文

8.python之面相对象part.2(特殊属性,类方法,静态方法)

技术小胖子 2017-10-18 15:21:00 浏览434
展开阅读全文

一.关于特殊属性(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)


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








      本文转自苏浩智 51CTO博客,原文链接:http://blog.51cto.com/suhaozhi/1912572,如需转载请自行联系原作者


网友评论

登录后评论
0/500
评论
技术小胖子
+ 关注