Im just playing around with python OOP, and when I call this class method I get <__main__.User object at 0x7fb889516220>
code
class User:
users = []
def __init__(self, name):
self.name = name
self.users.append(self)
@classmethod
def num_user(cls):
return len(cls.users)
@classmethod
def viewUsers(cls):
print(f"Number of users: {len(cls.users)}")
for user in cls.users:
print("\t- ", user)
@staticmethod
def isAllowed(age):
return age >= 10
name = input("Enter your name: ")
age = int(input("Enter your age: "))
if User.isAllowed(age) == False:
print(f"Sorry, {name.title()}. \nYou must be 10 or above to enter!\n")
else:
print(f"Welcome, {name.title()}!\n")
User(name).viewUsers()
I want it to print the names of the users. How could I fix this?
CodePudding user response:
This is a very minor bug. You were appending User objects to users but in the viewUsers method you wanted to print their names. Simply replace printing the user with user.name. The updated code is below.
class User:
users = []
def __init__(self, name):
self.name = name
self.users.append(self)
@classmethod
def num_user(cls):
return len(cls.users)
@classmethod
def viewUsers(cls):
print(f"Number of users: {len(cls.users)}")
for user in cls.users:
print("\t- ", user.name)
@staticmethod
def isAllowed(age):
return age >= 10
name = input("Enter your name: ")
age = int(input("Enter your age: "))
if User.isAllowed(age) == False:
print(f"Sorry, {name.title()}. \nYou must be 10 or above to enter!\n")
else:
print(f"Welcome, {name.title()}!\n")
User(name).viewUsers()
CodePudding user response:
This can be fixed by slightly changing your viewUsers function.
Currently, it is printing the User object instead make it print the name
@classmethod
def viewUsers(cls):
print(f"Number of users: {len(cls.users)}")
for user in cls.users:
print("\t- ", user.name)
