首页 > 其他 > 详细

静态方法、类方法、属性方法

时间:2019-05-13 19:31:14      阅读:93      评论:0      收藏:0      [点我收藏+]

一、静态方法

1、定义

在方法名前加上@staticmethod装饰器,表示此方法为静态方法

class Dog(object):
    def __init__(self,name):
        self.name = name
    @staticmethod    #在方法前加上staticmethod 装饰器定义静态方法
    def eat():
        print("the dog like eat bone")
    

2、静态方法特性

 特性:只是名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性

(1)静态方法不可以传入self参数,如果想传调用时必须传入实例本身 

class Dog(object):
    def __init__(self,name):
        self.name = name
    @staticmethod    #在方法前加上staticmethod 装饰器定义静态方法
    def eat(self,food): #可以定义,但是需传入实例本身
        print("{0} like eat {1}".format(self.name,food))
d=Dog("Mike")
d.eat(d,"bone")#传入实例d本身,否则会报错
# 结果
Mike like eat bone

 (2)静态方法可以用类直接调用,直接调用时,不可以直接传入self,否则会报错

class Dog(object):
    def __init__(self,name):
        self.name = name
    @staticmethod    #在方法前加上staticmethod 装饰器定义静态方法
    def eat(food): 
        print("Mike like eat {0}".format(food))

Dog.eat("bone")
#结果
Mike like eat bone

  (3)应用场景

一般情况下我们需要使用工具包的一些个类的封装,可以用静态方法,比如os模块

import os
os.system()
os.mkdir()

  上面两个方法没有什么必然的联系在里面,所以可以这么用

二、类方法

1、定义

在方法名前加上@classmethod装饰器,表示此方法为类方法

class Dog(object):
    name="Mike"
    def __init__(self,name):
        self.name = name
    @classmethod    #定义类方法
    def eat(self,food):
        print("{0} like eat {0}".format(self.name,food))

2、类方法特性

特性:只能访问类变量(又叫静态属性),不能访问实例变量

(1)访问实例变量

class Dog(object):
    def __init__(self,name):
        self.name = name
    @classmethod    #定义类方法
    def eat(self,food):
        print("{0} like eat {1}".format(self.name,food))

d=Dog("Mike")
d.eat("bone")
#结果
Traceback (most recent call last):
  File "/Users/bianbian/PycharmProjects/test/ha.py", line 9, in <module>
    d.eat("bone")
  File "/Users/bianbian/PycharmProjects/test/ha.py", line 6, in eat
    print("{0} like eat {1}".format(self.name,food))
AttributeError: type object ‘Dog‘ has no attribute ‘name‘

 (2)访问类变量(又叫静态属性)

class Dog(object):
    name = "Coco"
    def __init__(self,name):
        self.name = name
    @classmethod    #定义类方法
    def eat(self,food):
        print("{0} like eat {1}".format(self.name,food))

d=Dog("Mike")
d.eat("bone")
#结果
Coco like eat bone

  三、属性方法

1、定义

在方法名前加上@property装饰器,表示此方法为属性方法

 

 

 

静态方法、类方法、属性方法

原文:https://www.cnblogs.com/bianfengjie/p/10858403.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!