Переменные экземпляра/члена - это значения, связанные с конкретным экземпляром класса. Они могут быть разными для каждого класса и доступны через методы классов. в каждом экземпляре класса. Например, возьмите следующий файл класса:
class MyClass(object):
class_variable = "!"
def __init__(self, first_word, second_word):
self.__instance_variable_one = first_word
self.__instance_variable_two = second_word
def to_string(self):
return self.__instance_variable_one + " " + self.__instance_variable_two
Обратите внимание, что здесь переменные экземпляра имеют префикс __, что означает, что они должны быть частными. Теперь, чтобы использовать этот класс:
object_instance_one = MyClass("Hello", "World")
object_instance_one.to_string()
Hello World
print object_instance_one.class_variable
!
Заметьте, что это доступно непосредственно в качестве переменной класса, а не с помощью метода.
print object_instance_one.to_string() + object_instance_one.class_variable
Hello World!
Вы можете переопределить переменный класс, если вы хотите:
object_instance_one.class_variable = "!!!"
print object_instance_one.to_string() + object_instance_one.class_variable
Hello World!!!
Теперь, поскольку переменные экземпляра объявлены как частное использование __, вы обычно не изменять их непосредственно, но вместо этого используйте свойства, чтобы предоставить методы, которые позволяют вам изменять их. Эти правильные методы позволяют добавлять методы установки и получения (например, проверки или проверки типов). Пример:
class MyClass(object):
class_variable = "!"
def __init__(self, first_word=None, second_word=None):
self.__instance_variable_one = first_word
self.__instance_variable_two = second_word
@property
def instance_variable_one(self):
return self.__instance_variable_one
@instance_variable_one.setter
def instance_variable_one(self, value):
if isinstance(value, str):
self.__instance_variable_one = value
else:
raise TypeError("instance variable one must be of type str")
@property
def instance_variable_two(self):
return self.__instance_variable_two
@instance_variable_two.setter
def instance_variable_two(self, value):
if isinstance(value, str):
self.__instance_variable_two = value
else:
raise TypeError("instance variable two must be of type str")
def to_string(self):
return str(self.__instance_variable_one) + " " + str(self.__instance_variable_two)
Использование:
object_instance_one = MyClass()
object_instance_one.instance_variable_one = "Hello"
object_instance_one.instance_variable_two = "World"
print object_instance_one.to_string() + object_instance_one.class_variable
Hello World!
object_instance_one.instance_variable_two = 2
File "C:/MyClass.py", line 38, in
object_instance_one.instance_variable_two = 2 File "C:/MyClass.py", line 28, in > >instance_variable_two raise TypeError("instance variable two must be of type str") TypeError: instance variable two must be of type str
атрибут экземпляра ссылается на атрибуты конкретных экземпляров класса, из которых может быть много. Атрибут класса относится к атрибутам самого класса, которые наследуются экземплярами, но определенными в классе (если не переопределены в экземплярах). –