类(二)的静态属性、类的方法、静态方法

一.类的静态属性

即是将类的函数属性,封装成类似数据属性。比如:类方法函数的返回值获取。通过:@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

原文地址:https://www.cnblogs.com/liuhuacai/p/12596220.html