面向对象练习及补充

面向对象练习及补充

练习一

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)
原文地址:https://www.cnblogs.com/yangzilaing/p/13733118.html