Я только что заметил, как классы отличаются в Python по сравнению с C ++.
Подобно,
В C ++
Class test
{int a,b;
Void func()
{
}
}
В приведенном выше шаблоне класса a и b являются только переменными объекта, которые определены в шаблоне.
Принимая во внимание, что в python вы не можете указать, какие и все переменные объекта класс может иметь в определении класса.
Подобно,
Class student(self):
def func(self,x)
pass
В приведенном выше шаблоне класса мы не можем определить любые переменные объекта. dir (student) предоставит список только функций и переменных класса.
предположим, если я создаю экземпляр объекта этого класса, скажем S. Если я хочу дать имя этому ученику,
S.name = «« сделаем
Теперь dir (S) покажет атрибут имени, тогда как у dir (student) не будет поля имени
Для меня это звучало немного странно.
Функция интерпретации python позволяет добавлять столько полей, сколько мы хотим, к объекту, что нормально.
вопросы, которые пришли ко мне
почему они не предоставили возможность определения переменных в определении класса? , А также
как память зарезервирована во время создания экземпляра и изменена, когда новые объекты добавлены к объектам?
Спасибо,
-Kallis
Python подчеркивает динамическую типизацию, поэтому вы можете добавлять переменные в любое время. Вы можете добавить любые переменные, которые вы хотите быть там в __init__
конструктор. Вы также можете захотеть переменные класса. если ты действительно хотите, вы можете переопределить __setattr__
метод чтобы люди не могли добавлять новые атрибуты. Вы также можете использовать __slots__
, но ты не должен.
Если вы не используете __slots__
атрибуты хранятся в __dict__
толковый словарь. Таким образом, сам экземпляр класса занимает только пространство указателя словаря (плюс несколько других мелких вещей).
Других решений пока нет …