1 关于类的几个概念
代码块
静态属性:类属性(变量) 直接写在类中,全大写
动态属性:方法(函数) self
类方法 :@classmethod cls(不用通过对象实例化就可以调用,且不需要参数传)
静态方法 :@staticmethod 没有默认参数,和普通函数没什么区别,就是放在类里面
2 property和setter的使用
代码块
class A:
def __init__(self,name):
self.name=name
@property
def grade(self):
print(self.name)
@grade.setter
def grade(self,newname):
self.name=newname
a=A('nezha')
a.grade='huluwa'
a.grade
3 isinstance()和issubclass()之间知识
isinstance() 判断对象所属类型,包括继承关系
issubclass() 判断类与类之间的继承关系
代码块
class A:
pass
class B(A):
pass
class C:
pass
b=B()
print(isinstance(b,B)) #True 判断b对象是否属于B
print(isinstance(b,A)) #True 妈的,父类居然也属于,注意了
print(isinstance(b,C)) #False
print(type(b) is B) #True
print(type(b) is A) #False
#用type()来判断只能判断最近的一层,用isinstance()不限制
print(issubclass(B,A)) #判断B是否是A类的子类
4 enumerate()枚举的使用
代码块
a=['nezha','jingang','hulu']
for a,b in enumerate(a,1): #1代表序号从1开始
print(a,b)
5反射
用字符串数据类型的变量名来访问这个变量的值
反射的方法: getattr hasattr setattr delattr
区别gerattr(),hasattr(),setattr(),delattr()之间的区别
代码块
class Student:
def __init__(self,name):
self.name=name
s=Student('wangsiyu')
print(s.name)
#hasattr
print(hasattr(s,'name')) #True 说明有这个东西
print(getattr(s,'name')) #wangsiyu 拿到s对象中的name字符串的值
setattr(s,'name','sonofbitch') #修改s对象的name
print(s.name) #sonofbitch
delattr(s,'name')
print(s.__dict__) #没有了name
6通过反射调用方法
代码块
class Student:
role='student'
def study(self):
print('学生要学习')
def test(self):
print('学生考试')
a=Student()
cmd=input('请输入学生要做的方法:')
if hasattr(a,cmd):
getattr(a,cmd)()
else:
print('没有这方法')
7 模块的反射知识
代码块
import os
os.rename('mytest','hello') #把mytest文件重命名为hello
func=getattr(os,'rename')
func('hello','mytest') #通过反射把hello改为mytest
代码块
class Student:
name='wangsiyu'
@classmethod
def func(cls):
print('hello,world')
return 'see you again'
def login():
print('登陆成功')
return 'bbbb'
import sys
# print(sys.modules)
print(sys.modules['__main__']) #当前模块
print(sys.modules['__main__'].Student().name) #wangsiyu
print(sys.modules['__main__'].Student().func()) #hello,world, 返回值是see you again
print(sys.modules['__main__'].login()) #登陆成功,,,返回值bbbb
#用反射
getattr(sys.modules['__main__'],'login')()
getattr(sys.modules['__main__'],'Student')().func()

网友评论