Not really. The Pythonic ways to express this might be one of the following.
A regular old class
class StudentName:
def __init__(self, first_name, last_name):
self.first_name = first_name
self.last_name = last_name
student2 = StudentName(first_name="Craig", last_name="Playstead")
(You can also add a , *, argument after self to force users to spell out the keyword names see Keyword (Named) Arguments in Python.)
A namedtuple
import collections
StudentName = collections.namedtuple("StudentName", "first_name last_name")
student2 = StudentName(first_name="Craig", last_name="Playstead")
Namedtuples also act like tuples, so you can use student2[0] to access first_name and [1] for last_name.
A dataclass (Python 3.7+)
import dataclasses
@dataclasses.dataclass
class StudentName:
first_name: str
last_name: str
student2 = StudentName(first_name="Craig", last_name="Playstead")
__init__method which is constructor equivalent_slots_stackoverflow.com/a/28059785/1344855__slots__is an advanced feature that's very rarely needed in real life. I'm not sure how it would apply here much, anyway.