Python(二十四)面向对象编程

一. classmethod类方法

类方法通过@classmethod装饰器实现,类方法和普通方法的区别就是,类方法只能访问类变量,不能访问实例变量。

 

# 但是可以访问类变量

# 在定义方法的时候,传入的参数为cls,意思就是class,也就是类本身,以往在不使用装饰器的时候,自动传入的参数是self,也就是实例对象。变为cls了,自然只能使用类本身的属性,而不能使用实例的。 

二. staticmethod静态方法

既不能访问类变量,也不能访问实例变量,相当于孤立状态。

# @staticmethod下,无法使用类和其它方法的属性,需要在外部手动传入实例进行调用

# 使用很少,特殊场景应用多 

三. property属性方法

把一个方法变成一个静态的属性(变量)

# property下,无其它传入参数,也无法更改其已经定义好的属性

如果想要更改静态属性,需要新建一个关联的更改方法:

 # 装饰器为@原属性方法名字.setter,之后在传入的参数中加入需要更改的属性形参

如果想实现删除属性,同样的:

 四. 反射

1.概念

计算机中“反射”是翻译自英文’reflection‘,reflection有两个意思:1.物理反射。2.反省,自省。计算机中的反射更接近于第二种,意思为程序有自我反省的能力,即程序在运行的时候有对某一个object的状态的判断能力。

比如我们创建一个函数,该函数有一个形参,我们在函数中打印出从参数传入进来的对象的两个属性。按照正常流程走,对象通过参数传入函数,函数打印出对象的两个属性,但是如果传进来的对象没有这两个属性呢?这时候就应用到了“反射”,即程序自我反省的能力。

 

# 如上这个例子,我们用父类创建了一个实例a,再将a传入子类car_attack中的方法car_val中。如果我们想要事先验证其是否具有该属性再进行调用,调用时候进行如下修改:

 

# 使用if语句,用hasattr函数查找对象a中是否有out属性,如果没有才执行该程序,这样就完成了检测对象属性。 

2.通过字符串对对象中的属性进行操作

3.反射模块成员

除了可以用来检测类中有没有某个方法,还可以用来检测模块下有没有方法,类,或者变量

# 图中所示所示引入了模块sys,通过sys.modules[__name__]自动获取当前模块的名字,再利用检测和获取函数来验证当前模块是否有要应用的函数或者类。 

# 如上图我们预先写好了类,在下方代码中使用该类的内容的时候,便可以利用hasattr等函数对其进行调用,简化代码,增加逼格。  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值