- Your design doesn't follow best practice. Your - Libraryclass should create a library when you use- __init__, rather than a book. And so I'd split your code in half, create two classes; one for books, the other for the library.
- You shouldn't mutate data on - LibaryLibrary. This is as it mutates it on the class, rather than on the instance. And so if you make a new instance, then it will be tied to all the other instances.
- When making the book class. This can significantly be simplified with - collections.namedtuple. Such as:- Book = namedtuple('Book', 'name author ISBN price')
from collections import namedtuple
class Library(object):
    def __init__(self):
        self.books = []
    def addBook(self, book):
        self.books.append(book)
    def searchBookISBN(self, ISBN):
        for book in self.books:
            if book.ISBN == ISBN:
                return book
    def searchBookAuthor(self, author):
        written_by_author = []
        for book in self.books:
            if book.author == author:
                written_by_author.append(book)
        return written_by_author
    def searchUnderPrice(self, price):
        books_under_price = []
        for book in self.books:
            if book.price < price:
                books_under_price.append(book)
        return books_under_price
Book = namedtuple('Book', 'name author ISBN price')
library = Library()
library.addBook(Book('Geometry', 'Jeff Potter', '0596805888', 22))
library.addBook(Book('Math', 'George Harr', '0594805888', 15))
library.addBook(Book('English', 'James Odd', '0596225888', 10))
library.addBook(Book('Physics', 'Jeff Potter', '0597884512', 18))
print(library.searchBookISBN('0594805888'))
print(library.searchBookAuthor('George Harr'))
print(library.searchUnderPrice(20))
 
                