Python 访问和检查对象的属性';例如,像一个;用户名";属性在一个";“用户”;用于登录页面的对象

Python 访问和检查对象的属性';例如,像一个;用户名";属性在一个";“用户”;用于登录页面的对象,python,json,python-3.x,Python,Json,Python 3.x,我创建了一个类,其参数是用户输入,属性作为字典保存到一个带有json的文件中,由python重新读取。现在,我希望能够从单独的文件访问该文件中的信息(“用户名”属性)。如果用户名匹配,则您成功登录。 文件名:创建用户数据集 """THIS PROGRAM CREATES A USER AND SIMPLY STORES ITS INFO IN A TXT FILE TO BE RE-READ BY PYTHON""" from pip._vendor.distlib.compat import

我创建了一个类,其参数是用户输入,属性作为字典保存到一个带有json的文件中,由python重新读取。现在,我希望能够从单独的文件访问该文件中的信息(“用户名”属性)。如果用户名匹配,则您成功登录。

文件名:创建用户数据集

"""THIS PROGRAM CREATES A USER AND SIMPLY STORES ITS INFO IN A TXT FILE TO BE RE-READ BY PYTHON"""

from pip._vendor.distlib.compat import raw_input
import json
class User():
    '''simulates a user for a social network or pc'''
    def __init__(self, first_name, last_name, username, location, *interests):
        '''initialize attributes of user class'''
        self.first_name = first_name.title()
        self.last_name = last_name.title()
        self.username = username
        self.location = location.title()
        self.interests = interests


    @classmethod
    def get_userinfo(cls):
        '''creates a variable to store user inputs that correspond to User attributes'''
        first = raw_input("Welcome. PLease Enter Your First Name: ")
        last = raw_input("Please Enter Your Last Name: ")
        user = raw_input("Username: ")
        location = raw_input("What is your location? : ")
        interests = []

        print("List some of your interests (Press 'Q' Key to End Program.)")

        active = True
        while active:
            '''infinite loop that creates elements in a list until user quits'''
            interest = input().strip()
            if interest == 'q':
                active = False
            else:
                interests.append(interest)
                print("Press 'Q' Key to End Program.")
        return cls(first, last, user, location, interests)
        """cls fills in the attributes that would go inside of a given User instance"""


    def to_json(self):
        return json.dumps({"first": self.first_name, "last": self.last_name, "username": self.username,
                           "location": self.location, "interests": self.interests})


    @classmethod            
    def from_json(cls, j):
        dct = json.loads(j)
        return cls(dct["first"], dct["last"], dct["username"], dct["location"], dct["interests"])
第二个文件只是创建User:

文件名:创建用户前端

"""THIS PROGRAM CREATES INSTANCES OF USER AND STORES THEIR INFO IN A FILE"""
from create_user_dataset import User

def create(user): 
    '''creates an instance of User object'''
    filename = r'''C:\Users\User\Documents\dataset1.txt'''

    with open(filename, 'r+') as f:
        '''writes each attribute of User into a file'''
        f.write(user.get_userinfo().to_json())

user1 = User
create(user1)
之前的所有作品都非常完美,我只是想提供背景。第三个文件就是问题所在。问题是,当我创建一个新文件时,在导入存储我的用户实例的文件时,console只运行导入的文件,而不是文件本身。

文件名:用户登录

import create_user_frontend as cu

prompt_username = input("Please enter username: ")

print(cu.user1)

导入时将执行
create\u user\u frontend.py
中的此代码:

user1 = User
create(user1)
如果您不希望在导入文件时执行它,但仅当文件本身运行时(例如,通过调用
python create\u user\u frontend.py
),您应该将其更改为:

if __name__ == "__main__:
    user1 = User
    create(user1)

顺便说一句,这不会解决你所有的问题,只解决你问的问题

您仍有许多问题需要处理:

  • 更改后,
    cu.user1
    不再可用
  • 另一方面,
    cu.user1
    实际上只是
    create\u user\u dataset.user
    ,因为这条可疑的线
    user1=user
  • 函数
    create(user)
    只接收他
    user
    类,所以它接收任何东西都是没有意义的
  • 您可能需要调用
    User.get_userinfo()
    来实际创建用户实例
  • 您肯定应该更改这些函数的名称或其功能,因为名称与它们的功能不匹配:
    • User.get\u userinfo
      不获取用户信息-它创建一个
      User
      实例
    • create(user)
      既不将用户实例作为参数,也不返回新用户-它创建一个用户实例,将其内容转储到json中,然后在同一行中丢弃该实例

导入时将执行
创建用户前端.py中的此代码:

user1 = User
create(user1)
如果您不希望在导入文件时执行它,但仅当文件本身运行时(例如,通过调用
python create\u user\u frontend.py
),您应该将其更改为:

if __name__ == "__main__:
    user1 = User
    create(user1)

顺便说一句,这不会解决你所有的问题,只解决你问的问题

您仍有许多问题需要处理:

  • 更改后,
    cu.user1
    不再可用
  • 另一方面,
    cu.user1
    实际上只是
    create\u user\u dataset.user
    ,因为这条可疑的线
    user1=user
  • 函数
    create(user)
    只接收他
    user
    类,所以它接收任何东西都是没有意义的
  • 您可能需要调用
    User.get_userinfo()
    来实际创建用户实例
  • 您肯定应该更改这些函数的名称或其功能,因为名称与它们的功能不匹配:
    • User.get\u userinfo
      不获取用户信息-它创建一个
      User
      实例
    • create(user)
      既不将用户实例作为参数,也不返回新用户-它创建一个用户实例,将其内容转储到json中,然后在同一行中丢弃该实例

是的!这很有效。现在,我如何创建一个“登录页面”,检查用户名?那么如何使cu.user1可用?或者更确切地说,我如何访问username参数并检查它?@GilbertoRoblesSilva我想您需要实现以下功能:
从文件名(filename)
(returnsa a
user
),
将用户写入文件名(filename,user)
(不返回任何内容),然后从主脚本使用这些功能,例如,
user1=从文件(filename1)读取用户。
。是!这很有效。现在,我如何创建一个“登录页面”,检查用户名?那么如何使cu.user1可用?或者更确切地说,我如何访问username参数并检查它?@GilbertoRoblesSilva我想您需要实现以下功能:
从文件名(filename)
(returnsa a
user
),
将用户写入文件名(filename,user)
(不返回任何内容),然后从主脚本使用这些功能,例如,
user1=从文件(filename1)读取用户。