Разница между методами и атрибутами в Python
Я изучаю Python и делаю упражнение по классам. Он 9X_object-oriented говорит мне добавить атрибут nd к моему 9X_method классу и метод к моему классу. Я всегда 9X_py думал, что это одно и то же, пока не прочитал 9X_object-oriented упражнение. В чем разница между ними?
- Для класса Foo вы вызываете атрибут ...
Ответ #1
Ответ на вопрос: Разница между методами и атрибутами в Python
Терминология
Ментальная модель:
- переменная, хранящаяся в экземпляре или классе, называется attribute.
- Функция, хранящаяся в экземпляре или классе, называется method.
Согласно глоссарию Python:
атрибут: значение, связанное 9X_python-interpreter с объектом, на который ссылается имя с использованием 9X_py выражений, разделенных точками. Например, если 9X_python-shell объект o имеет атрибут a он будет обозначаться 9X_oops как o.a
метод: функция, которая определена внутри 9X_python-shell тела класса. Если называть как атрибут экземпляра 9X_python-shell этого класса, метод получит объект экземпляра 9X_python в качестве его первого аргумента (который 9X_methods обычно называется self). См. Функцию и вложенную 9X_python область видимости.
Примеры
Терминология, применяемая 9X_attribute к фактическому коду:
a = 10 # variable
def f(b): # function
return b ** 2
class C:
c = 20 # class attribute
def __init__(self, d): # "dunder" method
self.d = d # instance attribute
def show(self): # method
print(self.c, self.d)
e = C(30)
e.g = 40 # another instance variable
- Вы только что создали и установили атрибут, выполнив `eg = 40` вне определения класса? ...
Ответ #2
Ответ на вопрос: Разница между методами и атрибутами в Python
Метод является атрибутом, но не все атрибуты 9X_python-interpreter являются методами. Например, если у нас 9X_oo есть класс
class MyClass(object):
class_name = 'My Class'
def my_method(self):
print('Hello World!')
Этот класс имеет два атрибута: class_name
и 9X_python-shell my_method
. Но только my_method
- это метод. Методы - это функции, принадлежащие 9X_method вашему объекту. На всех занятиях есть дополнительные 9X_oo скрытые атрибуты, но, вероятно, именно об 9X_methods этом и говорится в вашем упражнении.
- Конечно, я сказал придирку :). Но опять же `x = []; x.sort is x.sort` * также оценивается как `False`. * Потому что, опять же, метод * не принадлежит * экземпляру. Он динамически привязан к эк ...
Ответ #3
Ответ на вопрос: Разница между методами и атрибутами в Python
Быстрое упрощенное объяснение.
Атрибут == характеристики. Метод 9X_classes == операции / действия.
Например, опишем 9X_pythonic кота (мяу!)
Каковы атрибуты (характеристики) кошки? У 9X_python-interpreter него разная порода, название, окрас, есть 9X_class ли на них пятна ... и т. Д.
Какие методы 9X_py (действия) кошки? Он может мяукать, залезать, царапать 9X_class вас, разрушать ваш ноутбук и т. Д.
Обратите 9X_oops внимание на разницу, атрибуты определяют 9X_python характеристики кошки.
Методы, с другой стороны, определяют 9X_py действие / операцию (глагол).
Теперь, учитывая 9X_classes приведенное выше определение, давайте создадим 9X_py объект класса 'cat' ... meowww
class Cat():
Для создания 9X_python-interpreter атрибутов используйте def init (self, arg1, arg2) - (как 9X_attribute показано ниже).
Ключевое слово self - это 9X_py ссылка на конкретный экземпляр класса.
def __init__(self, mybreed, name):
# Attributes
self.breed = mybreed
self.name = name
# Operations/actions --> methods
def kill_mouse(self):
print('Insert some method to kill mouse here')
Примечание 9X_object-oriented (см. выше) mybreed - это входной аргумент, который 9X_object-oriented-design необходимо указать пользователю, а self.breed 9X_py - это атрибут экземпляра, присвоенный аргументу 9X_oop mybreed. Обычно они одинаковы (например, порода 9X_class для обоих, self.breed = порода). Здесь он 9X_object-oriented-design закодирован по-другому, чтобы избежать путаницы.
А 9X_python-shell атрибуты обычно записываются как self.attribute_name 9X_class (как показано выше).
Теперь методы больше 9X_python похожи на действия или операции, где вы 9X_class определяете функцию внутри тела класса для 9X_object-oriented выполнения некоторой операции, например, убийства 9X_attributes мыши. Метод также может использовать атрибуты, которые 9X_python вы определили в самом объекте.
Еще одно ключевое 9X_oo различие между методом и атрибутом - это 9X_classes то, как вы его называете.
Например, допустим, мы 9X_pythonic создаем экземпляр, используя указанный выше 9X_oop класс.
my_cat = Cat()
Для вызова атрибута вы используете
my_cat.name
или
my_cat.breed
Для 9X_py методов вы вызываете его для выполнения 9X_method некоторого действия. В Python вы вызываете 9X_oops метод с открывающей и закрывающей круглой 9X_oops скобкой, как показано ниже:
my_cat.kill_mouse()
Ответ #4
Ответ на вопрос: Разница между методами и атрибутами в Python
Метод - это функция, определенная в классе. Атрибут 9X_method - это переменная экземпляра, определенная 9X_class в классе.
Пример:
class Example(object):
def __init__(self, name):
self.name = name
def hello(self):
print 'Hi, I am ' + self.name
Здесь hello
- метод, а name
- атрибут.
-
3
-
5
-
6
-
5
-
1
-
9
-
2
-
1
-
7
-
3
-
4
-
6
-
4
-
4
-
4
-
5
-
5
-
3
-
13
-
6
-
2
-
14
-
3
-
4
-
1
-
4
-
3
-
1
-
1
-
1
-
5
-
2
-
7
-
13
-
1
-
5
-
2
-
3
-
16
-
8
-
30
-
7
-
6
-
2
-
3
-
4
-
6
-
1
-
3
-
2