面向对象编程
-
通过类获取一个对象的过程 - 实例化
-
类名()会自动调用类中的__init__方法
-
类和对象之间的关系?
- 类 是一个大范围 是一个模子 它约束了事务有哪些属性 但是不能约束具体的值
- 对象 是一个具体的内容 是模子的产物 它遵循了类的约束 同时给属性赋上具体的值
-
类有一个空间 存储的是定义在class中的所有名字
-
每一个对象又拥有自己的空间 通过对象名.__dict__就可以查看这个对象的属性和值
print(alex.name) # print(alex.dict['name']) 属性的查看
alex.name = 'alexsb' # 属性的修改
alex.money = 100 # 属性的增加
del alex.money # 属性的删除 -
练习类的创建和实例化
d = ['k':'v']
print(d,id(d))
d['k'] = 'vvvv'
print(d,id(d)) -
修改列表\字典中的某个值,或者是对象的某一个属性 都不会影响这个对象\字典\列表所在的内存空间
实例化所经历的步骤
1.类名() 之后的第一个事儿:开辟一块儿内存空间 2.调用__init__把空间的内存地址作为self参数传递到函数内部 3.所有的这一个对象需要使用的属性都需要和self关联起来 4.执行完init中的逻辑之后,self变量会自动的被返回到调用处(发生实例化的地方)
-
dog类 实现狗的属性 名字 品种 血量 攻击力 都是可以被通过实例化被定制的
class Dog():
def init(self,name,blood,aggr,kind):
self.dog_name = name
self.hp = blood
self.ad = aggr
self.kind = kind小白 = Dog('小白',5000,249,'柴犬') print(小白.dog_name) print(小白.__dict__)
-
对象/实例 = 类名() => 实例化的过程
-
对象的属性/实例变量
-
类中的方法(函数) 有一个必须传的参数 self 对象
-
hasattr getattr setattr delattr 反射
- 实例对象
- 类
- 本模块 sys.modules[name]
- 其他模块
if hasattr(obj,'name'):
getattr(obj,'name')
-
找到tbjx对象 的c类 实例化一个对象
obj = getattr(tbjx,'C')() -
找到tbjx对象 的c类 通过对c类这个对象使用反射取到area
print(getattr(tbjx.C,'area')) -
找到tbjx对象 的c类 实例化一个对象 对对象进行反射取值
obj = getattr(tbjx,'C')('赵海狗')
print(obj.name)
print(getattr(obj,'name')) -
一次执行多个函数
def func1():
print('in func1')func_lst = [f'func{i}' for i in range(1,5)] for func in func_lst: getattr(sys.modules[__name__],func)()
-
反射应用
class User:
user_list = [('login','登录'),('register','注册'),('save','存储')]def login(self): print('欢迎来到登录页面') def register(self): print('欢迎来到注册页面') def save(self): print('欢迎来到存储页面') # choose_dic = { # 1: User.login, # 2: User.register, # 3: User.save, # } while 1: choose = input('请输入序号:\n1:登录\n2:注册\n3:存储\n').strip() obj = User() # choose_dic[int(choose)](obj) getattr(obj,obj.user_list[int(choose)-1][0])() # getattr(obj,obj.user_list[int(1)-1][0])()