今日内容:
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)()