找回密码
 立即注册
首页 业界区 安全 面向对象初级

面向对象初级

滤冽 昨天 14:35
    面向对象初级:
    1.面向对象三大特征:封装  继承   多态    self含义:  指向实例对象本身,让实例能够访问类中的属性和方法
    2.类和对象的创建:    
类和对象的创建(登录注册功能)
  1. class User:
  2.     def __init__(self,name,pwd):
  3.         self.name = name
  4.         self.pwd = pwd
  5. class User_Mannager():
  6.     def __init__(self):
  7.         self.user_list = []#存放User类对象
  8.     def regist(self):
  9.         """
  10.         用户注册
  11.         """
  12.         while True:
  13.             name = input('输入用户名N(退出):')
  14.             if name.upper() == 'N':
  15.                 break
  16.             for item in self.user_list:
  17.                 if item.name == name:
  18.                     print('用户名已存在,重新输入')
  19.                     flag = True
  20.                     break
  21.             else:
  22.                 pwd = input('输入密码:')
  23.                 self.user_list.append(User(name,pwd))
  24.                 print('注册成功')
  25.                 return
  26.             continue
  27.     def Login(self):
  28.         """
  29.         用户登录
  30.         """
  31.         while True:
  32.             name = input('输入用户名:')
  33.             pwd = input('输入密码:')
  34.             for i in self.user_list:
  35.                 if i.name == name and i.pwd == pwd:
  36.                     print('登录成功')
  37.                     return
  38.             else:
  39.                 print('用户名密码错误')
  40.                 continue
  41.     def run(self):
  42.         """
  43.         程序入口
  44.         """
  45.         while True:
  46.             func_dict = {'1':self.Login,'2':self.regist}
  47.             print('界面(N退出):1【登录】2.【注册】')
  48.             num = input('输入:')
  49.             if num.upper() == 'N':
  50.                 return
  51.             func = func_dict.get(num)
  52.             if func:
  53.                 func()
  54.             else:
  55.                 print('输入错误')
  56. if __name__ == "__main__":
  57.     obj = User_Mannager()
  58.     obj.run()
复制代码
属性:对象具有的特征叫属性
    设置和获取对象具有的属性:
      1,静态  类中:  对象.属性=值    
             外部:  设置:obj = Foo(属性的值)
                  获取:对象.属性  
      2,动态(反射):以字符串的形式去设置获取对象属性  类中:对象.属性=值或者pass  
                                外部:setattr:新增此对象的属性及值或者修改此对象已经具有的属性的值    
                                   格式:setattr(对象   ,属性   (字符串形式),值   (任意类型))
                                   getattr:获取对象已经具有的属性的值                
                                   格式:getattr(对象,属性  (字符串形式),默认值(属性不存在时返回,任意类型)
属性的设置和获取(静态和动态)
  1. #设置和获取对象的值方法一(静态):
  2. class Foo:
  3.     def __init__(self,n,p):     #给这个类所创建的对象中公有的属性进行值的初始化
  4.         self.name = n
  5.         self.pwd = p
  6. obj = Foo('guohan',123)     #设置对象属性的值(对象属性的值封装到对象中)
  7. print(obj.name)     #获取对象的值
  8. #>>>guohan
  9. #设置和获取对象的值方法二(动态:内置函数):     setattr getattr
  10. class Foo:
  11.     def __init__(self,n,p):     #给这个类所创建的对象中公有的属性进行值的初始化
  12.         self.name = n
  13.         self.pwd = p
  14. obj = Foo(1,1)
  15. n = input('输入用户名:')
  16. p = input('输入密码:')
  17. setattr(obj,'name',n)    #通过内置函数setattr去设置\修改对象的属性
  18. setattr(obj,'pwd',p)
  19. data1 = getattr(obj,'name',0)   #通过内置函数getattr去获取对象中封装的属性的值
  20. data2 = getattr(obj,'pwd',0)
  21. data3 = getattr(obj,'email',0)
  22. print(data1)
  23. print(data2)
  24. print(data3)
  25. #>>>guoahn
  26. #>>>111
  27. #>>>0
复制代码
    3.封装:    同一类的方法封装到同一类中    值封装到对象中
            类中的属性和方法:公有(一般都是)  私有(以_开头):类实例化的对象无法直接访问私有成员(属性和方法)
            获取对象中封装的所有值
对象.__dict__以字典形式获取对象的属性和值
  1. #获取对象中封装的所有的属性ji
  2. class Foo:
  3.     def __init__(self,name,pwd,eamil):
  4.         self.name = name
  5.         self.pwd =  pwd
  6.         self.eamil = eamil
  7. obj = Foo('guohan','123','888')
  8. print(obj.__dict__)
  9. #>>>{'name': 'guohan', 'pwd': '123', 'eamil': '888'}
  10. setattr(obj,'name','gh')
  11. print(obj.__dict__)
  12. #>>>{'name': 'gh', 'pwd': '123', 'eamil': '888'}
复制代码
    4.继承:    搞清楚self是谁由谁创建 调用方法时去self自己的类中去找  
            查找方法顺序:先再自己类中找再去基类找(多个基类则由左至右)  时刻注意self是谁
    5.多态:    对于一个函数而言,Python对于参数的类型不会限制,那么传入参数时就可以是各种类型,在函数中如果有例如:arg.方法,那么就是对于传入类型的一个限制(类型必须有该方法)。
              这就是鸭子模型只要有该方法,就是我们要想的类型
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册