Differences between `class` and `def` [closed]
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking for code must demonstrate a minimal understanding of the problem being solved. Include attempted solutions, why they didn’t work, and the expected results. See also: Stack Overflow question checklist
What is the main difference between class and def in python? Can a class in python interact with django UI (buttons)?
It may not seem like it, but there’s actually a tremendous difference between the two. They’re both techniques used to help organize code, but there are loads of differences in what they do, how they’re used, and why you would use them. The topic is really too huge to easily cover in a single answer. Here’s an introduction to classes/objects that you could try reading. Once you kind of understand the broad concepts, feel free to come back and ask more questions if you’re still confused.
I suggest you look up object-oriented programming on wikipedia or so, to understand what a class is. To access a ‘def’ from within a class, you need to first make an object of that class, and than do object.nameofdef(), which than executes that ‘def’ on the object, while if you just make a ‘def’ outside of a class, it can be executed on whatever you want, but without it being linked to a certain object (not sure if this is explaining a lot, but i dont know how to be clearer on this)
Classes are a way of organization functions. If you want to a call a function, you have to first mention the class followed by the dot e.g. class.function . Now when we talk about objects, what we mean is that we create a object x for example by assigned x to a class e.g. x = class and in this way we can simpley invoke class.function by writing instead x.function . x is an object because it now contains functions as opposed to being a variable and containing only numbers for example.
Терминология в Классах Python
Я запутался в формулировках в классах Python, может у кого то есть картинка объясняющая разницу? В классах в Python есть: Переменные — которые называются атрибутами или же свойствами класса. Функции — которые называются методами. Экземпляры (они же обьекты) — это что? Тоже переменные? Поля класса — это свойство, или же просто атрибут. Поле класса так же является переменной? Члены класса — атрибут. Тоже переменная? Мешанина этих слов создает кашу в голове и непонимание. Помогите разобраться.
3 ответа 3
Картинки, к сожалению, нет. К тому же, сдаётся мне, что, прочитав раздел ООП в какой-нибудь книжке по Python, Вы с этим разберётесь, но всё же оставлю здесь своё субъективное понимание представленных терминов.
- Начать лучше, думаю, с объектов (экземпляров). Поясню на примере. Класс – это тип. Пусть у нас есть класс «Компьютер». Тогда объектами этого класса будут «мой компьютер», «Ваш компьютер», «Вон тот комп, что мне понравился в магазине». То есть, некоторые конкретные представители данного класса. Или же есть класс «Человек». Объектами будут Вася, Петя, Коля и т.д. Если перейти к Python:
# Тот же класс человека (пока без реализации) class Human: # Это класс . Vanya = Human() # Vanya – объект класса.
- Атрибуты, свойства, поля класса – это плюс/минус одно и то же (Возможно кто-то пояснит тонкие различия, но, это всё-таки моё видение, а я вижу их как одно и то же, по крайней мере если брать среднее для всех языков. В некоторых Свойство – это нечто отдельное). Это переменная, существующая внутри объекта этого класса и содержащая в себе значение, отражающее некоторое свойство этого объекта. Если вернуться к нашему примеру, атрибуты класса «Человек» это, например, возраст, рост, пол, фамилия и т.д. Если к коду:
class Human: def __init__(self, age, gender, height): self.age = age self.gender = gender self.height = height Vanya = Human(20, 'male', 180) # Это Ваня, ему 20, он мужчина, рост 180 Yulya = Human(17, 'female', 160) # Это Юля, ей 17, она девушка, рост 160 print(Vanya.age) # Сколько лет Ване? Выведет 20 print(Yulya.height) # Какого роста Юля? Выведет 160
(в Python, в отличие от C++, например, атрибуты обычно не объявляются заранее (хотя я не эксперт в Python, могу ошибаться), а просто вводятся как переменные с self. в конструкторе или другом методе).
- Ну и про методы: методы (функции-члены) класса – это функции, описывающие, что умеют делать объекты класса. Чтобы сильно не растекаться мыслию, добавлю в пример только один метод – взрослеть. На нужное кол-во лет. Собственно, к коду:
class Human: def __init__(self, age, gender, height): self.age = age self.gender = gender self.height = height def grow_up(self, extra_age): self.age += extra age # Сюда бы проверку на положительность возраста, но мне лень Vanya = Human(20, 'male', 180) # Это Ваня, ему 20, он мужчина, рост 180 Yulya = Human(17, 'female', 160) # Это Юля, ей 17, она девушка, рост 160 Vanya.grow_up(1) # Ваня повзрослел на год Yulya.grow_up(2) # Юля повзрослела на 2 (она на севере, в космосе или где там ещё год за два) print(Vanya.age) # Сколько лет Ване? Уже 21. Выведет 21
P.S. Во-первых, надеюсь не обидел носителей имён, представленных в качестве примера. Если вдруг, извините, я не хотел 🙂 Во-вторых, надеюсь, понятно объяснил. Повторюсь, что это моё субъективное мнение, не претендующее на абсолютную истину. Исправления и уточнения приветствуются в комментариях.
P.P.S. И да, найдите что-нибудь хорошее про ООП из литературы. Не знаю насчёт Python, но Фленов в своей «Библии С#» достаточно понятно и забавно описал все принципы и термины, которые Вас интересуют. В любом случае, квалифицированный автор книги расскажет подробнее и понятнее.
Чем классы отличаются от функций в python?
Изучаю питон, и многие курсы и книги часто ориентируются на изучение классов в этом языке.
Я посмотрел что делают классы, и у меня появился вопрос: а чем собственно классы отличаются от обычных функций в питоне? Вроде бы так же как и функция имеет под собой какой-то блог кода, который при вызове таким же образом выполняется. В чем тогда суть классов и что нельзя сделать с функциями, что можно с классами?
Простой 2 комментария
Если коротко — различие в идеологии и подходе обработки данных.
Класс, в некотором роде — можно считать самостоятельным типом. Экземпляры класса, можно настроить так, чтобы вы могли складывать / умножать / делить / . .
+ ООП, позволяет сократить объем и увеличить понятность кода (при его адекватном использовании).
Например, вы не можете записать в функцию данные и использовать вызов функции без аргументов ( на самом деле можно реализовать, но вы быстро откажетесь от этой идеи).
Если коротко — различие в идеологии и подходе обработки данных.
Класс, в некотором роде — можно считать самостоятельным типом. Экземпляры класса, можно настроить так, чтобы вы могли складывать / умножать / делить / . .
+ ООП, позволяет сократить объем и увеличить понятность кода (при его адекватном использовании).
Например, вы не можете записать в функцию данные и использовать вызов функции без аргументов ( на самом деле можно реализовать, но вы быстро откажетесь от этой идеи).