human
Write me a the Python code you requested given the following:
I am working on the file "Classes+and+Objects.ipynb".
The first task is:
Static Methods
A static method doesn’t have the calling object passed into it as the first parameter. This means that it doesn’t have access to the rest of the class or instance at all. We can call them from an instance or a class object, but they are most commonly called from class objects, like class methods.
If we are using a class to group together related methods which don’t need to access each other or any other data on the class, we may want to use this technique. 
The advantage of using static methods is that we eliminate unnecessary cls or self parameters from our method definitions. 
The disadvantage is that if we do occasionally want to refer to another class method or attribute inside a static method we have to write the class name out in full, which can be much more verbose than using the cls variable which is available to us inside a class method.
Can you write Python code for it?
assistant
#Here is the Python code you requested.

class ClassGrades:

    def __init__(self, grades):
        self.grades = grades

    @classmethod
    def from_csv(cls, grade_csv_str):
        grades = grade_csv_str.split(', ')
        cls.validate(grades)
        return cls(grades)

    @staticmethod
    def validate(grades):
        for g in grades:
            if int(g) < 0 or int(g) > 100:
                raise Exception()

try:  
    # Try out some valid grades
    class_grades_valid = ClassGrades.from_csv('90, 80, 85, 94, 70')
    print('Got grades:', class_grades_valid.grades)

    # Should fail with invalid grades
    class_grades_invalid = ClassGrades.from_csv('92, -15, 99, 101, 77, 65, 100')
    print(class_grades_invalid.grades)
except:  
    print('Invalid!')