面向对象初级
面向对象初级: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.方法,那么就是对于传入类型的一个限制(类型必须有该方法)。
这就是鸭子模型只要有该方法,就是我们要想的类型
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! 感谢分享,下载保存了,貌似很强大 这个有用。 过来提前占个楼 感谢发布原创作品,程序园因你更精彩
页:
[1]