It can work with only Phonebook, but only if you store the contacts' information in a dictionary or in a list of lists. As you've written it, Phonebook can only store data for a single person. The attributes listed in __init__() are basically variables. Since none of them can store multiple data points, you can only have one person's information loaded at a time.
The add_pb_entry() method has several problems. The add_pb_entry() call on line 14 shouldn't work. add_pb_entry() only takes self as an argument so the function call on line 14 should raise an error.
Even if that call did work, appending to newentry won't accomplish anything because newentry is a local variable for the method. You can correct that by calling it self.newentry which would make a new attribute. Again though, that list needs something to contain and Phonebook currently runs the risk of creating an object that contains an object which contains another object, etc. instead of containing them all in a single data structure (e.g. a list).
With what you have, the easiest way to get to your desired end is to make self.entries (to replace newentry) to contain all the contact data in a list of lists. That attribute should be written in one of two ways:
class Phonebook:
def __init__(self, name, id, age, contact):
self.entries = [[name, id, age, contact]]
def add_pb_entry(self):
name = input("Please enter name:")
id = input("ID: ")
age = input("Please enter age:")
contact = input("Please enter contact information")
self.entries.append([name, id, age, contact])
def update_contact(self):
searchid = input("Please enter the ID of the entry you want to update:")
if searchid == id:
contact = input("Please enter contact information")
def print_pb_entries(self):
print(self.entries)