面向对象练习及补充
面向对象练习及补充
练习一
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)
记录学习的点点滴滴