面向对象初级:
1.面向对象三大特征:封装 继承 多态 self含义: 指向实例对象本身,让实例能够访问类中的属性和方法
2.类和对象的创建:
类和对象的创建(登录注册功能)- class User:
- def __init__(self,name,pwd):
- self.name = name
- self.pwd = pwd
- class User_Mannager():
- def __init__(self):
- self.user_list = []#存放User类对象
- def regist(self):
- """
- 用户注册
- """
- while True:
- name = input('输入用户名N(退出):')
- if name.upper() == 'N':
- break
- for item in self.user_list:
- if item.name == name:
- print('用户名已存在,重新输入')
- flag = True
- break
- else:
- pwd = input('输入密码:')
- self.user_list.append(User(name,pwd))
- print('注册成功')
- return
- continue
- def Login(self):
- """
- 用户登录
- """
- while True:
- name = input('输入用户名:')
- pwd = input('输入密码:')
- for i in self.user_list:
- if i.name == name and i.pwd == pwd:
- print('登录成功')
- return
- else:
- print('用户名密码错误')
- continue
- def run(self):
- """
- 程序入口
- """
- while True:
- func_dict = {'1':self.Login,'2':self.regist}
- print('界面(N退出):1【登录】2.【注册】')
- num = input('输入:')
- if num.upper() == 'N':
- return
- func = func_dict.get(num)
- if func:
- func()
- else:
- print('输入错误')
- if __name__ == "__main__":
- obj = User_Mannager()
- obj.run()
复制代码 属性:对象具有的特征叫属性
设置和获取对象具有的属性:
1,静态 类中: 对象.属性=值
外部: 设置:obj = Foo(属性的值)
获取:对象.属性
2,动态(反射):以字符串的形式去设置获取对象属性 类中:对象.属性=值或者pass
外部:setattr:新增此对象的属性及值或者修改此对象已经具有的属性的值
格式:setattr(对象 ,属性 (字符串形式),值 (任意类型))
getattr:获取对象已经具有的属性的值
格式:getattr(对象,属性 (字符串形式),默认值(属性不存在时返回,任意类型)
属性的设置和获取(静态和动态)- #设置和获取对象的值方法一(静态):
- class Foo:
- def __init__(self,n,p): #给这个类所创建的对象中公有的属性进行值的初始化
- self.name = n
- self.pwd = p
- obj = Foo('guohan',123) #设置对象属性的值(对象属性的值封装到对象中)
- print(obj.name) #获取对象的值
- #>>>guohan
- #设置和获取对象的值方法二(动态:内置函数): setattr getattr
- class Foo:
- def __init__(self,n,p): #给这个类所创建的对象中公有的属性进行值的初始化
- self.name = n
- self.pwd = p
- obj = Foo(1,1)
- n = input('输入用户名:')
- p = input('输入密码:')
- setattr(obj,'name',n) #通过内置函数setattr去设置\修改对象的属性
- setattr(obj,'pwd',p)
- data1 = getattr(obj,'name',0) #通过内置函数getattr去获取对象中封装的属性的值
- data2 = getattr(obj,'pwd',0)
- data3 = getattr(obj,'email',0)
- print(data1)
- print(data2)
- print(data3)
- #>>>guoahn
- #>>>111
- #>>>0
复制代码 3.封装: 同一类的方法封装到同一类中 值封装到对象中
类中的属性和方法:公有(一般都是) 私有(以_开头):类实例化的对象无法直接访问私有成员(属性和方法)
获取对象中封装的所有值
对象.__dict__以字典形式获取对象的属性和值- #获取对象中封装的所有的属性ji
- class Foo:
- def __init__(self,name,pwd,eamil):
- self.name = name
- self.pwd = pwd
- self.eamil = eamil
- obj = Foo('guohan','123','888')
- print(obj.__dict__)
- #>>>{'name': 'guohan', 'pwd': '123', 'eamil': '888'}
- setattr(obj,'name','gh')
- print(obj.__dict__)
- #>>>{'name': 'gh', 'pwd': '123', 'eamil': '888'}
复制代码 4.继承: 搞清楚self是谁由谁创建 调用方法时去self自己的类中去找
查找方法顺序:先再自己类中找再去基类找(多个基类则由左至右) 时刻注意self是谁
5.多态: 对于一个函数而言,Python对于参数的类型不会限制,那么传入参数时就可以是各种类型,在函数中如果有例如:arg.方法,那么就是对于传入类型的一个限制(类型必须有该方法)。
这就是鸭子模型只要有该方法,就是我们要想的类型
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |