面向对象补充练习
面向对象练习
#练习一
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.主程序的思维也要学会使用
'''
记录学习的点点滴滴