面向对象补充练习

Posted yangzilaing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象补充练习相关的知识,希望对你有一定的参考价值。

面向对象练习

#练习一
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 = [] #那么会不会有一个疑问,可不可以不用self?
                            #答上一个问题:不可以,因为类中只允许包含函数,这里面是包含只是在主函数的一个列表


    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.主程序的思维也要学会使用
‘‘‘

以上是关于面向对象补充练习的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段9——JS中的面向对象编程

面向切面编程AOP是面向对象编程OOP的补充

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段

Spring简单的练习AspectJ,来完成aop-菜鸟一枚

JAVA 面向对象补充[toString方法和equals方法]

Java程序设计基础 面向对象 练习