文档章节

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

o
 osc_w9s1w4o0
发布于 2019/04/03 15:09
字数 922
阅读 9
收藏 0
def

精选30+云产品,助力企业轻松上云!>>>

          静态属性:

          在类的函数属性里面,加上一个property的装饰器,这个函数属性就是静态属性,调用方式和数据属性一样了,不用加括号

class School:
    tag = 1
    def __init__(self,name,xiaozhang,lenth,widet):
        self.name = name
        self.xiaozhang = xiaozhang
        self.lenth = lenth
        self.widet = widet

    @property             #静态属性
    def test(self):
        return self.lenth*self.widet

s1 = School('xx大学',123,313,214)
print(s1.test)
print(s1.tag)

>>>66982
>>>1

        从例子看出,调用静态属性,和调用类的数据属性方法一样,这样用户不会发现和数据属性有什么不同,所以静态属性一般用来返回类比较常用的属性,比如一个圆的类,用户输入了半径,就可以定义一个圆面积的静态属性,也可以定义一个周长的静态属性,虽然我们是通过函数的方法实现,但用户调用的时候比较方便。

      类的函数属性可以分成分成两大类:

一:绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入):

    1. 绑定到类的方法:用classmethod装饰器装饰的方法。

                为类量身定制

                类.boud_method(),自动将类当作第一个参数传入

              (其实对象也可调用,但仍将类当作第一个参数传入)

    2. 绑定到对象的方法:没有被任何装饰器装饰的方法(就是正常的函数属性)

               为对象量身定制

               对象.boud_method(),自动将对象当作第一个参数传入

             (属于类的函数,类可以调用,但是必须按照函数的规则来,没有自动传值那么一说)

       所以,绑定到类的方法,就是类方法,在类的函数属性里面,加上一个classmethod的装饰器,这个函数属性就是类方法,调用方式和函数属性一样,但是要把括号里的self改成cls

class School:
    tag = 1
    def __init__(self,name,xiaozhang,lenth,widet):
        self.name = name
        self.xiaozhang = xiaozhang
        self.lenth = lenth
        self.widet = widet

    @property             #静态属性
    def test(self):
        return self.lenth*self.widet

    @classmethod         #类方法
    def tell_info(cls):
        print(cls.tag)


#分别用类和实例调用
School.tell_info()

s1 = School('xx大学',123,313,214)
s1.tell_info()     #实例也可以调用,但是默认传的第一个参数仍然是类

>>>1
>>>1

二:非绑定方法:用staticmethod装饰器装饰的方法

        1. 不与类或对象绑定,类和对象都可以调用,但是没有自动传值那么一说。就是一个普通工具而已

    注意:与绑定到对象方法区分开,在类中直接定义的函数,没有被任何装饰器装饰的,都是绑定到对象的方法,可不是普通函数,对象调用该方法会自动传值,而staticmethod装饰的方法,不管谁来调用,都没有自动传值一说

          所以静态方法,就是在类内部用staticmethod装饰的函数,是普通函数。statimethod不与类或对象绑定,谁都可以调用,没有自动传值效果,staticmethod只是名义上归属类管理,不能使用类变量和实例变量,是类的工具包

class School:
    tag = 1
    def __init__(self,name,xiaozhang,lenth,widet):
        self.name = name
        self.xiaozhang = xiaozhang
        self.lenth = lenth
        self.widet = widet

    @property             #静态属性
    def test(self):
        return self.lenth*self.widet

    @classmethod         #类方法
    def tell_info(cls):
        print(cls.tag)

    @staticmethod        #静态方法
    def test1(x,y):
        print(x*y)

#分别用类和实例调用
School.test1(3,4)
print(School.test1)

s1 = School('xx大学',123,313,214)
s1.test1(2,3)
print(s1.test1)

>>>12
>>><function School.test1 at 0x000002859750BAE8>   #就是普通函数
>>>6
>>><function School.test1 at 0x000002859750BAE8>   #就是普通函数

          后续会讲到__str__和__repr__,再演示一个类方法和静态方法的实例,先保存这篇。

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

jQuery获取select onChange的值 - jQuery get value of select onChange

问题: I was under the impression that I could get the value of a select input by doing this $(this).val(); 我的印象是我可以通过执行$(this).val();来获取选择输入的值$(this).val()......

javail
33分钟前
13
0
道翰天琼解密宇宙信息大脑三者最核心奥秘,破解认知智能基础理论(群聊形式)

三体论是探索研究宇宙,信息和人类大脑三者关系的理论体系。是认知智能的奠基理论体系之一。宇宙和信息,信息和人类大脑,人类大脑和宇宙,三者之间存在着某种未被完全揭示的奥秘。三体论的核...

jackli2020
35分钟前
15
0
OSChina 周日乱弹 —— 这些照片能留存下来要感谢蛇不吃相机

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《28》- ゴンチチ 手机党少年们想听歌,请使劲儿戳(这里) @FalconChen :真得学...

小小编辑
42分钟前
76
0
如何在视频中的对象后面添加图像

作者|PRATEEK JOSHI 编译|VK 来源|Analytics Vidhya 概述 在运动物体后面添加图像是一个典型的计算机视觉项目 了解如何使用传统的计算机视觉技术在视频中添加logo 介绍 我的一位同事向我提出...

人工智能遇见磐创
46分钟前
14
0
UKUI Desktop Environment

install $ sudo add-apt-repository ppa:ubuntukylin-members/ukui3.0$ sudo apt upgrade or $ sudo apt-get install curl$ curl -sL 'https://keyserver.ubuntu.com/pks/lookup?&op=get&......

qwfys
51分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部