Разница между методами и атрибутами в Python

Я изучаю Python и делаю упражнение по классам. Он 9X_object-oriented говорит мне добавить атрибут nd к моему 9X_method классу и метод к моему классу. Я всегда 9X_py думал, что это одно и то же, пока не прочитал 9X_object-oriented упражнение. В чем разница между ними?

30
1

  • Для класса Foo вы вызываете атрибут ...
4
Общее количество ответов: 4

Ответ #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
43
1

  • Вы только что создали и установили атрибут, выполнив `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 этом и говорится в вашем упражнении.

17
2

  • Конечно, я сказал придирку :). Но опять же `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()

15
0

Ответ #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 - атрибут.

1
0