python类属性和类方法是什么_python类属性和类方法以及静态方法和反射

今日内容:

1.属性

2. 类方法

3.静态方法

4.反射

1. 属性

是指调用类中的函数,就像调用对象属性值一样调用.更权威解释:将方法 伪装 成属性,虽然在代码层面上没有任何高深之处,但是让其看起来更合理.

示例:

classA:def __init__(self,*args):

self.name=args[0]

self.height= args[1]

self.weight= args[2]

@propertydefbmi(self):return self.height /self.weight**2a1= A("leon",1.72,60)print(a1.bmi)

注意,这里是通过加@property  这个装饰器来实现的,

即然是属性,那么也可以修改的,关于修改和删除,是通过下面方法实现的,

示例:

classB:def __init__(self,*args):

self.name=args[0]

self.__pwd = args[1]

@propertydefpwd(self):return self.__pwd@pwd.setter#注意这里的装饰器名字和上面的函数名一致,以及下面的函数都是一致的,下面赋值会传入这个new_pwd里面

defpwd(self,new_pwd):

self.__pwd =new_pwd

obj1= B("leon","hao123")

obj1.pwd= 123456

print(obj1.pwd)

属性的删除操作示例:

classB:def __init__(self,*args):

self.name=args[0]

self.__pwd = args[1]

@propertydefpwd(self):return self.__pwd@pwd.setter#注意这里的装饰器名字和上面的函数名一致,以及下面的函数都是一致的,下面赋值会传入这个new_pwd里面

defpwd(self,new_pwd):

self.__pwd =new_pwd

@pwd.deleterdefpwd(self):del self.__pwdobj1= B("leon","hao123")

obj1.pwd= 123456

print(obj1.pwd)delobj1.pwdprint(obj1.pwd)

具体操作流程如下:

# 第一步,对属性进行改操作,自动执行 被这个@pwd.setter装饰器装饰的方法

# 第二步,将新值传给这个被@pwd.setter装饰器装饰的方法里面,当做参数.

2. 类方法,静态方法

类方法:类名去调用类方法,自动将类的空间传给类方法中的cls..对象如果调用类方法,自动将类空间传给类中的cls

示例:

classC:

num= 1

def __init__(self,*args):

self.name=args[0]

self.age= args[1]

@classmethoddefclass_fun(cls):print(cls.num)

c1= C("leon",18)

c1.class_fun()

什么情况下使用类方法?

直接让类去操作类中的方法,没有必要创建对象在操作的时候,用类方法.

3. 静态方法

静态方法:在类中定义一个静态方法,无需传入你的类空间,对象空间,可以当成普通函数去用.(也就是不用再传入self的,也就是类中的独立函数)

示例:

classD:def __init__(self):pass@staticmethoddeffun(a,b):return a +b

d1=D()print(d1.fun(2,3))

4.反射(非常非常重要,)

反射:通过 字符串 操作一个空间 (对象).

总共有四个方法:

1.getattr()

2.hasattr()

3.setattr()

4.delattr()

四种场景的不同使用方法:

1,实例化一个对象去研究

示例:

classA:

country= "China"

def __init__(self,*args):

self.name=args[0]

self.age= args[1]deffun(self):print("666")

a1= A("leon",18)

getattr(a1,"fun")()print(hasattr(a1,"name1"))#getattr(a1,"name1")

setattr(a1,"sex","男")print(getattr(a1,"sex"))

delattr(a1,"name")print(hasattr(a1,"name"))

2.类中去研究.

classA:

num= 1

def __init__(self,*args):

self.name=args[0]

self.age= args[1]deffun(self):print("IN A")print(getattr(A,"num"))print(setattr(A,"num1",3))print(hasattr(A,"num1"))

delattr(A,"num1")print(hasattr(A,"num1"))

3,其他模块去研究.

oldboy.py"""class B:

name_list = ['张三','旭哥','李四','旭哥']

@staticmethod

def add(a,b):return a+b

def login(username,password):

if username == 'alex' and password == '123':

print('登录成功')

else:

print('登录失败')"""

importoldboyprint(getattr(oldboy.B,"name_list"))print(hasattr(oldboy,"login"))

setattr(oldboy,"name",1)print(hasattr(oldboy,"name"))print(getattr(oldboy,"name"))

4.本模块(本文件)去研究.

示例:

importsysdeflogin():print("登录")deffun():print("333")

content= input(">>>")

getattr(sys.modules[__name__],content)()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值