面向对象2--静态方法、类方法、属性方法

方法

普通方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。

  • 普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self;
  • 类方法:由类调用; 至少一个cls参数;执行类方法时,自动将该类赋给cls;
  • 静态方法:由类调用;无默认参数;
class Foo(object):
    def __init__(self,name):
        self.name = name

    def ord_func(self):
        print("普通方法")

    @classmethod
    def class_func(cls):
        """定义类方法,至少一个cls参数"""
        print("类方法")

    @staticmethod
    def static_func():
        """定义静态方法,无默认参数"""
        print("静态方法")


#调用普通方法
f = Foo('wupeiqi')
f.ord_func()

#调用类方法(类方法只能通过cls访问类属性)
Foo.class_func()

#调用静态方法(一个通过类调用的普通函数,不能直接访问类的任何属性或方法)
Foo.static_func()

相同点:对于所有的方法而言,均属于类(非对象)中,所以,在内存中也只保存一份。
不同点:方法调用者不同、调用方法时自动传入的参数不同。

属性方法

@property装饰器可以使被装饰的方法成为一个属性,类似其他语言的get方法

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.__score  = score
    @property                         #实例.score  调用
    def score(self):                 
        return self.__score
    @score.setter                     #实例.score = value  调用
    def score(self,score):
        if score < 0 or score > 100:
            raise ValueError('invalid score')
        self.__score = score
    @score.deleter                    #del 实例.score    调用
    def score(self):
        del self.__score
        print("score is deleted")

s = Student('Bob',59)
s.score = 60     #将60 赋给score  1
print(s.score)
# s.score = 1000  #将会触发异常   2
del s.score

60
score is deleted

从上面可以看出,通过@property装饰的属性方法能够对属性封装更多想要的操作

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,883评论 0 9
  • 原文出处:南峰子的技术博客 Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了...
    _烩面_阅读 5,084评论 1 5
  • Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的...
    有一种再见叫青春阅读 3,775评论 0 3
  • Objective-C语言是一门动态语言,他将很多静态语言在编译和链接时期做的事情放到了运行时来处理。这种动态语言...
    tigger丨阅读 5,353评论 0 8
  • 你说我欠你一个告白,迟迟不见;我说你有了我所有陪伴,经久不散。给你的Stella,却是给我的阳光和星辰:雪色琉璃,...
    致此终年阅读 1,549评论 0 0

友情链接更多精彩内容