Python не будет волшебным образом создавать контейнерный объект, когда вы начнете присваивать ему атрибуты, и если matlab позволяет это, я считаю, что matlab сильно поврежден. Учтите это:
person.name = "Mike"
persom.age = 25
person.sex = "Male"
Теперь у нас есть два объекта, person
и persom
, и person
не имеет age
, , и не было никаких намеков на то, что это произошло. Позже вы пытаетесь напечатать person.age
и, можно надеяться, тогда Матлаб жалуется ... через две страницы после фактической ошибки.
Класс сам по себе может использоваться в качестве контейнера или пространства имен. Нет необходимости создавать его экземпляр, и это сэкономит вам немного времени на ввод текста, если вы просто захотите связку атрибутов.
class sex:
male = "M"
female = "F"
class person:
name = "Mike"
age = 25
sex = sex.male
Чтобы получить доступ к любому из них или изменить его, вы можете использовать person.name
и т. Д.
N.B. Я также использовал класс для sex
, чтобы проиллюстрировать одно из преимуществ этого: он обеспечивает согласованность значений данных (не помня, использовали ли вы «M», «Male» или «male») и ловит опечатки (например, Python). будет жаловаться на sex.mlae, но не на строку «mlae», и если вы позже проверите ее на «мужчина», последняя потерпит неудачу).
Конечно, вы все еще рискуете ошибиться в написании name
, age
или sex
в этом типе определения класса. Поэтому вы можете использовать класс в качестве шаблона и создать его экземпляр.
class Person:
def __init__(self, name, age=None, sex=None):
self.name, self.age, self.sex = name, age, sex
Теперь, когда вы делаете:
person = Person("Mike", 25, sex.male)
или если вы хотите задокументировать, что это за параметры:
person = Person("Mike", age=25, sex=sex.male)
практически невозможно получить объект с ошибочным именем атрибута. Если вы ошибетесь, Python выдаст вам сообщение об ошибке в тот момент, когда вы допустили ошибку. Это всего лишь одна из причин сделать это таким образом.