zoukankan      html  css  js  c++  java
  • 类(二)的静态属性、类的方法、静态方法

    一.类的静态属性

    即是将类的函数属性,封装成类似数据属性。比如:类方法函数的返回值获取。通过:@proporty

    class Who(object):
        what = 'what'
        # brother = 'jack'
        def __init__(self,name,age,gender):
            self.name = name
            self.age = age
            self.gender =gender
        def information(self):
            print(self.name,self.age,self.gender)
            return self.name              ##将函数增加一个返回值
    p1 = Who('张三',18,'')
    p1.information()      ##实例化调用类的函数,有(),因为类的属性字典中存储的是函数的内存地址,调用需要加()
    print(Who.information)    ##<function Who.information at 0x000002985CFFAA60>

    运行结果:张三 18 男

    ()+无返回值 :静态属性可以省去(),也可以获得返回值。

    ##静态属性
    class Who(object):
        what = 'what'
        # brother = 'jack'
        def __init__(self,name,age,gender):
            self.name = name
            self.age = age
            self.gender =gender
        @property
        def information(self):
            print(self.name,self.age,self.gender)
            return self.name
    p1 = Who('张三',18,'')
    a = p1.information    ##作为静态属性调用,而非函数调用【无()】
    print(a)
    
    张三 18 男             
    张三                   ##返回值
    print(Who.information)    ##<property object at 0x0000018E723967C8>

     二.类的方法

    类方法由@classmethod装饰,可以访问类属性。

    2.1通过实例化调用类属性:在实例化数据属性字典中,没有找到what变量,就向上一级寻找。所以,通过实例化能够,轻松的调用类属性what

    class Who(object):
        what = 'what'
        # brother = 'jack'
        def __init__(self,name,age,gender):
            self.name = name
            self.age = age
            self.gender =gender
        def information(self):
            print(self.name,self.age,self.gender)
            return self.name
        def leishuxing(self):
            print(self.what)
    
    p1 = Who('张三',18,'')
    a = p1.leishuxing()  ##what

    2.2不通过实例化,怎么调用类属性呢?直接通过类调用,也可以调用到类属性。【类外部调用类属性】

    print(Who.what)  ##what

    2.3不通过实例化,在类的内部调用类的属性又该如何操作呢?

    class Who(object):
        what = 'what'
        # brother = 'jack'
        def __init__(self,name,age,gender):
            self.name = name
            self.age = age
            self.gender =gender
        def information(self):
            print(self.name,self.age,self.gender)
            return self.name
        def leishuxing(self):
            print(self.what)
    Who.leishuxing()

    TypeError: leishuxing() missing 1 required positional argument: 'self'

    错误信息显示:不通过实例化,类内部调用类属性,缺少位置参数self。

     通过 @classmethod类方法,在类的内部调用类属性

    class Who(object):
        what = 'what'
        # brother = 'jack'
        def __init__(self,name,age,gender):
            self.name = name
            self.age = age
            self.gender =gender
        def information(self):
            print(self.name,self.age,self.gender)
            return self.name
        @classmethod
        def leishuxing(self):
            print(self.what)
    Who.leishuxing()  ##what

    三.静态方法

    静态方法只是名义上的归属类管理,不能使用类变量,是类的工具包(相当于普通函数)。也就是说,类中的这个方法函数,与类的数据属性无关,仅仅是一个放在类里面的普通函数

    class Who(object):
        what = 'what'
        # brother = 'jack'
        def __init__(self,name,age,gender):
            self.name = name
            self.age = age
            self.gender =gender
        def information(self):
            print(self.name,self.age,self.gender)
            return self.name
        @classmethod
        def leishuxing(self):
            print(self.what)
    
        @staticmethod
        def state_fun(x):
            print('this is a family of %s'%x)
    Who.state_fun('three')

    this is a family of three

  • 相关阅读:
    数据库之case when + group by 联合使用
    JAVA之JSON对象解析
    oracle导入表数据时遇到外键约束问题导致导入失败
    Oracle之会话阻塞
    cmd的操作命令导出导入.dmp文件
    性能优化理解
    JS原型与原型链的理解
    Promise实现原理
    Js运行机制Event Loop
    JS循环中断与异步for...in forEach map
  • 原文地址:https://www.cnblogs.com/liuhuacai/p/12596220.html
Copyright © 2011-2022 走看看