python类内静态函数 python类静态方法

类函数、成员函数、静态函数、抽象函数、方法伪装属性本篇博客是滚雪球学 Python 第二轮的最后一篇博客python类内静态函数,python类内静态函数我们将内容继续提升到面向对象部分,为python类内静态函数你补充类里面的一些装饰器 , 学习之后,希望你的 Python 基础知识可以更上一层楼 。
先直接看代码,再对代码内容进行分析与学习 。
首先要掌握的是类函数的定义格式,在普通函数的前面添加装饰器@classmethod , 该函数就会转换为类函数 , 同时函数的第一个参数默认是cls , 该变量名可以任意 , 建议使用成cls,这个是程序员之间的约定 。
在 Python 中,大部分@classmethod装饰的函数末尾都是return cls(XXX),return XXX.__new__ ()也就是@classmethod的一个主要用途是作为构造函数 。
先掌握一个概念,静态函数不属于它所在的那个类,它是独立于类的一个单独函数,只是寄存在一个类名下,先建立这个基本概念,后面学起来就简单很多python类内静态函数了 。
在同一个类中 , 调用静态方法,使用类名.函数名()的格式 。
先创建一个父类,其中包含两个静态函数与一个类函数 。
再编写一个S类继承自F类python类内静态函数:
测试之后,基本结论如下:
如果在子类中覆盖了父类的静态函数,那调用时使用的是子类自己的静态函数 ,
如果在子类中没有覆盖父类的静态函数 , 那调用时使用的是父类的静态函数,
类函数同样遵循该规则 。
如果希望在子类中调用父类的属性或者函数,请使用父类名.的形式实现 。
被@abstractmethod装饰的函数为抽象函数,含抽象函数的类不能实例化 , 继承了含抽象函数的子类必须覆盖所有抽象函数装饰的方法,未被装饰的可以不重写 。
抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化,实现代码如下:
抽象基类中学习还需要了解元类相关知识 , 在第三轮滚雪球学 Python 中将为你展开这部分内容 。
在 Python 面向对象的编码过程中 , 对象.属性来获取属性的值,使用对象.方法()来调用方法,通过装饰器@property可以将一个方法伪装成属性,从而使用对象.方法没有括号的形式调用 。代码非常简单:
这种写法最直接的应用,就是将部分属性变成只读属性,例如,上述代码,你无法通过下述代码对name进行修改 。
如果希望方法伪装的属性具备修改和删除功能,需要参考下述代码:
上述代码在将name方法伪装成属性之后,可以通过@name.setter和@name.deleter对同名的name方法进行装饰,从而实现了修改与删除功能 。
所以一般使用方法伪装属性的步骤是:
如果你觉得这个比较麻烦,还存在一种方法伪装属性的方式 。使用property函数 , 原型如下
通过上述函数将方法伪装成属性的代码为:
滚雪球学 Python 第二轮 15 篇博客在一次结束了,下一轮将在 4 月中旬再次开启,学 Python 我们一直在路上,希望本系列的课程对你的 Python 学习有所助力 。
python 类方法和静态方法的区别面相对象程序设计中,类方法和静态方法是经常用到的两个术语 。
逻辑上讲:类方法是只能由类名调用;静态方法可以由类名或对象名进行调用 。
在C中,静态方法与类方法逻辑上是等价的,只有一个概念,不会混淆 。
而在python中,方法分为三类实例方法、类方法、静态方法 。代码如下:
class Test(object):
def InstanceFun(self):
print("InstanceFun");
print(self);
@classmethod
def ClassFun(cls):
print("ClassFun");
print(cls);
@staticmethod
def StaticFun():
print("StaticFun");
t = Test();
t.InstanceFun();# 输出InstanceFun,打印对象内存地址“__main__.Test object at 0x0293DCF0”
Test.ClassFun();# 输出ClassFun,打印类位置 class '__main__.Test'
Test.StaticFun();# 输出StaticFun
t.StaticFun();# 输出StaticFun
t.ClassFun();# 输出ClassFun,打印类位置 class '__main__.Test'
Test.InstanceFun();# 错误,TypeError: unbound method instanceFun() must be called with Test instance as first argument
Test.InstanceFun(t);# 输出InstanceFun,打印对象内存地址“__main__.Test object at 0x0293DCF0”
t.ClassFun(Test);# 错误classFun() takes exactly 1 argument (2 given)
可以看到,在python中,两种方法的主要区别在于参数 。实例方法隐含的参数为类实例self , 而类方法隐含的参数为类本身cls 。
静态方法无隐含参数,主要为了类实例也可以直接调用静态方法 。
所以逻辑上类方法应当只被类调用,实例方法实例调用,静态方法两者都能调用 。主要区别在于参数传递上的区别,实例方法悄悄传递的是self引用作为参数 , 而类方法悄悄传递的是cls引用作为参数 。
python实现了一定的灵活性使得类方法和静态方法,都能够被实例和类二者调用
python 里面有静态函数吗python的类里用@staticmethod的是静态方法python类内静态函数,@classmethod的是类方法python类内静态函数,如下
class Person(object):
【python类内静态函数 python类静态方法】person_list = []
def __init__(self, name, age):
self.name = name
self.age = age
self.person_list.append(self)
@classmethod
def one_year_later(cls):
for p in cls.person_list:
p.age= 1
@staticmethod
def born_one_boby(name):
return Person(name, 0)
def __repr__(self):
return 'Person name:%s, age:%s' % (self.name, self.age)
if __name__ == '__main__':
petter =Person('Petter',23)
merry = Person('Merry',21)
print(petter) # Person name:Petter, age:23
print(merry)#Person name:Merry, age:21
Person.one_year_later()
print(petter)#Person name:Petter, age:24
print(merry)#Person name:Merry, age:22
baby = merry.born_one_boby('Tom')
print(Person.person_list) #[Person name:Petter, age:24, Person name:Merry, age:22, Person name:Tom, age:0]
Python中静态方法和类方法的区别是什么'>lt;译文>Python中静态方法和类方法的区别是什么要在类中使用静态方法 , 需在类成员函数前面加上@staticmethod标记符,以表示下面的成员函数是静态函数 。使用静态方法的好处是,不需要定义实例即可使用这个方法 。另外 , 多个实例共享此静态方法 。
普通的类方法需要对象实例化之后才能调用。
python类内静态函数的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于python类静态方法、python类内静态函数的信息别忘了在本站进行查找喔 。

    推荐阅读