• 面向对象补充练习


    面向对象练习

    #练习一
    class Base:
        x = 1
    obj = Base()
    print(obj.x)
    obj.y = 123
    print(obj.y)
    obj.x = 123
    print(obj.x)
    print(Base.x)
    '''
    输出结果
    1
    123
    123
    1
    '''
    
    
    #练习二
    class Foo(object):
        n1 = '武沛齐'
        def __init__(self,name):
            self.n2 = name
    obj = Foo('太白')
    print(obj.n1)
    print(obj.n2)
    
    print(Foo.n1)
    print(Foo.n2)??
    '''
    输出结果为:
    武沛齐
    太白
    武沛齐
    type object 'Foo' has no attribute 'n2'
    报错原因:在没有实例化对象时,__init__并不会自动执行,所以会报错
    '''
    
    
    #在对象中定义的数值在实例化时可以重新定义数值,即再次调用的时候数值是更改后的数值
    
    
    class User:
        def __init__(self,name,pwd):  # 把用户信息全都封装到此处
            self.name = name
            self.pwd = pwd
    
    class Account:
    
        def __init__(self):
            self.user_list = [] #那么会不会有一个疑问,
                                #答上一个问题:可以,是类变量
    
    
        def login(self):
            username = input("请输入用户名:")
            userpwd = input("请输入密码")
            flag = False #falg的用法确实要谨记
            for i in self.user_list:#在同一个类中,self指的是obj,所以之间的相互调用是被允许的。
                if i.name == username and i.pwd == userpwd:
                    flag = True
            if flag :
                print("登录成功")
            else:
                print("用户名或密码错误")
    
        def register(self):
    
            while True:
                user = input("请输入用户命:")
                pwd =  input ("请输入密输入N,输入N停止:")
                if pwd == "N":
                    return  #是直接跳出这个函数,返回上一级的函数
                user_object = User(user,pwd) #封装的思想!!!直接User哐叱给干进去了。那么是否可以用方法呢,主动执行,是否可以可以考虑将其封装到一个方法中呢?
                                             #答上述问题:所谓的封装数据必然是用到的类而不是所谓的方法,所以User的存在是必要且必须的。
                self.user_list.append(user_object) #此处的user_object应该是实例化的对象
    
    
        def run(self):
            #主程序
    
            while True:
                print("1.注册;2.登录")
                choice = input("请选择:")
                if choice == "1":
                    self.register()
                elif choice =="2":
                    self.login()
                else:
                    print("选择错误")
    
    if __name__ == "__main__":
        obj = Account()
        obj.run()
    '''
    总结与思考
    1.对于多个同一属性的函数时,一定要学会将其封装到一个类中
    2.对于数据的封装一定是再起一个新的类,而不是一个新的方法
    3.主程序的思维也要学会使用
    '''
    
  • 相关阅读:
    代码转换为html显示
    subprocess实时获取结果和捕获错误
    centos7开放端口和防火墙设置
    Inside The C++ Object Model(一)
    知其所以然(以算法学习为例)
    sql语法
    DLL断点调试
    我的算法学习之路
    算法系列之一
    cocos2d-x游戏引擎核心(3.x)----事件分发机制之事件从(android,ios,desktop)系统传到cocos2dx的过程浅析
  • 原文地址:https://www.cnblogs.com/yangzilaing/p/13977106.html
Copyright © 2020-2023  润新知