• 面向对象练习及补充


    面向对象练习及补充

    练习一

    class Foo:
        def func(self):
            print('foo.func')
    
    obj = Foo()
    result = obj.func()
    #函数并没有返回任何的值,所以result为None
    print(result,type(result))
    #要严谨,小知识带你又忘记了
    

    练习二

    # 定义个类,其中有计算周长和面积的方法(圆的半径通过参数传递到初始化方法)。
    
    import math
    p = math.pi
    #为什么不能把属性值封装到init中
    class Circle:
        def __init__(self,r,):
            self.r = r
    
        def area(self):
            a = self.r**2 * p
            print(round(a,2))
    
        def long(self):
            l = self.r *2*p
            print(round(l,2))
    P = Circle(5)
    P.area()
    P.long()
    

    练习三

    """
       # 需求
       1. while循环提示用户输 : 户名、密码、邮箱(正则满 邮箱格式)
       2. 为每个用户创建一个对象,并添加到列表中。
       3. 当列表中的添加 3个对象后,跳出循环并以此循环打印所有用户的姓名和邮箱
       """
    user_list = []
    count = 0
    while True:
        count += 1
        user = input("请输入用户名:")
        pwd = input("请输入密码:")
        email = input("请输入邮箱:")
    #将每个用户封装到一个对象中
        class Person:
            def __init__(self, user, pwd, email):
                self.user = user
                self.pwd = pwd
                self.email = email
    
            # 该怎样将这么多属性封装到一个对象中
            def info(self):
                print(self.user, self.pwd, self.email)
    
        P1 = Person(user,pwd,email)
        user_list.append(P1)
        if count >= 3:
           for i in user_list:
               i.info()
    

    练习四

    """
       # 需求
       1. while循环提示用户输 : 户名、密码、邮箱(正则满 邮箱格式)
       2. 为每个用户创建一个对象,并添加到列表中。
       3. 当列表中的添加 3个对象后,跳出循环并以此循环打印所有用户的姓名和邮箱
       """
    user_list = []
    count = 0
    while True:
        count += 1
        user = input("请输入用户名:")
        pwd = input("请输入密码:")
        email = input("请输入邮箱:")
    #将每个用户封装到一个对象中
        class Person:
            def __init__(self, user, pwd, email):
                self.user = user
                self.pwd = pwd
                self.email = email
    
            # 该怎样将这么多属性封装到一个对象中
            def info(self):
                print(self.user, self.pwd, self.email)
    
        P1 = Person(user,pwd,email)
        user_list.append(P1)
        if count >= 3:
           for i in user_list:
               i.info()
    
    
    

    练习五

    class User:
        def __init__(self, name, pwd):
            self.name = name
            self.pwd = pwd
    
    class Account:
        def __init__(self):
            # 用户列表,数据格式:[user对象,user对象,user对象]
            self.user_list = []
    
        def login(self):
            """
            用户登录,输入用户名和密码然后去self.user_list中校验用户合法性
            :return:
            """
            #当obj调用是,对象为obj
            username = input("请输入用户名:")
            password = input("请输入密码:")
            flag = False
            for row in self.user_list:#row是一个user对象,此处的self依然为obj,并未重新启用Class类
                if row.name == username and row.pwd == password:
                    flag = True
                    break
            if flag:
                print("登录成功")
            else:
                print("用户名或密码错误")
    
        def register(self):
            """
            用户注册,每注册一个用户就创建一个user对象,然后添加到self.user_list中,表示注册成功。
            :return:
            """
            while True:
                user = input("请输入用户名(n退出):")
                if user.upper() == "N":
                    return self.run()
                pwd = input("请输入密码:")
                user_object = User(user,pwd) 
                '''启用User类,将pwd和user封装到一个user_object对象中
                就好比一个工厂,本来两个零散的物件,需要进行整合,user和pwd相当于两个零件而Class这个类相当于一个可加工的工厂,
                而这个工厂有几个参数就可以封装几个零件.'''
    
                self.user_list.append(user_object)#调用的是register类,所以此处的self应该为obj
                #self.user_list应该表示的是开辟了一块空白内存,具体点是obj.user_list的空白内存
                #如果是user_object.func()什么的是执行其所包含的方法,如果依然为self则是该层的方法,具体到现在就是regster()方法
    
        def run(self):
            """
            主程序
            :return:
            """
            print("1:注册;2:登录")
            choice = input("请选择:")
            if choice == "1":
                self.register()
            elif choice == "2":
                self.login()
            else:
                print("选择错误")
    
    if __name__ == '继承':
        obj = Account()
        obj.run()
    

    补充

    #有意思的数据封装:通过函数和对象将其封装
    class Request:
        def __init__(self,a1,a2,a3):
            self.a1 = a1
            self.a2 = a2
            self.a3 = a3
    def func(arg):
        arg.a1
        arg.a2
        arg.a3
    obj = Request(1,2,3)
    func(obj)
    
  • 相关阅读:
    shell查看内存
    shell 终端字符颜色
    PHP获取一年有几周以及每周开始日期和结束日期
    PHP 计算当前时间是这一年的第几周
    laravel orWhere
    进程与线程的一个简单解释
    go cap和len的区别
    go 总结常用函数
    go append 函数常见操作
    php 字符串常用函数
  • 原文地址:https://www.cnblogs.com/yangzilaing/p/13733118.html
Copyright © 2020-2023  润新知