Как работают классы в python

Метод 2 – Использование OptParse.optionparter

Теперь это еще один подход, который вы можете использовать, если вы не слишком удобны с помощью Отказ

Мы можем использовать Модуль, чтобы перечислить методы.

А именно, мы можем использовать получить список методов.

Это автоматически выполнит работу для вас, и вам просто нужно иметь дело с выходом. Давайте посмотрим на пример.

import inspect

class MyClass(object):

    # MyClass property
    property1 = 

    def __init__(self, a):
        assert isinstance(a, float) or isinstance(a, int)
        self.state = a

    def add(self, a):
        assert isinstance(a, float) or isinstance(a, int)
        self.state = self.state + a
        return self.state


    def subtract(self, a):
        assert isinstance(a, float) or isinstance(a, int)
        self.state = self.state - a
        return self.state


    def multiply(self, a):
        assert isinstance(a, float) or isinstance(a, int)
        self.state = self.state * a
        return self.state


    def divide(self, a):
        assert isinstance(a, float) or isinstance(a, int)
        self.state = self.state / a
        return self.state


    @staticmethod
    def global_method(a, b):
        return a + b


    @classmethod
    def myclass_method(cls):
        return cls


# Create our instance
instance = MyClass(100)

# Get the list of functions
method_list = inspect.getmembers(MyClass, predicate=inspect.ismethod)

print(method_list)

Выход

Мы можем получить первый элемент каждого кортежа, чтобы получить имя метода.

Constructor

In Python, the constructor method is invoked automatically whenever a new object of a class is instantiated, same as constructors in C# or Java.
The constructor must have a special name and a special parameter called .

Note:

The first parameter of each method in a class must be the , which refers to the calling object.
However, you can give any name to the first parameter, not necessarily .

The following example defines a constructor.

Example: Constructor
Copy

Now, whenever you create an object of the class, the constructor method will be called, as shown below.

Example: Constructor Call on Creating Object
Copy

The constructor in Python is used to define the attributes of an instance and assign values to them.

Объекты

Объект является экземпляром класса. Мы можем взять класс Shark, определенный выше, и использовать его для создания объекта или экземпляра класса.

Создадим объект Shark с именем sammy:

sammy = Shark()

Мы инициализировали объект sammy как экземпляр класса, установив его равным Shark().

Теперь используем два метода с объектом Shark sammy:

sammy = Shark()
sammy.swim()
sammy.be_awesome()

Объект sammy использует два метода — swim() и be_awesome(). Мы вызвали их с помощью оператора «.», который ссылается на атрибут объекта. В этом случае атрибут является методом, и он вызывается с круглыми скобками.

Поскольку ключевое слово self было параметром методов класса Shark, объект sammy передается методам. Параметр self позволяет методам ссылаться на атрибуты объекта.

Но когда мы вызываем методы, в круглых скобках ничего не передается. Объект sammy автоматически передается с помощью оператора «.» (точки).

Добавим объект в программе:

shark.py

classShark:
defswim(self):
        print("The shark is swimming.")

defbe_awesome(self):
        print("The shark is being awesome.")


defmain():
    sammy = Shark()
sammy.swim()
sammy.be_awesome()

if __name__ == "__main__":
    main()

Запустим программу, чтобы узнать, что она делает:

python shark.py

Вывод
The shark is swimming.
The shark is being awesome.

Объект sammy вызывает два метода в функции main(), указывая запустить эти методы.

Как оценить производительность модели

При классификации иногда нет необходимости использовать точность для оценки производительности модели.

Подумайте об анализе сильно несбалансированного набора данных. Например, вы пытаетесь определить, является ли транзакция мошеннической или нет, но только 0,5% вашего набора данных содержит мошенническую транзакцию. Тогда вы можете предсказать, что ни одна из транзакций не будет мошеннической и будет иметь показатель точности 99,5%! Конечно, это очень наивный подход, который не помогает обнаруживать мошеннические транзакции.

Так что мы используем?

Обычно мы используемчувствительностьа такжеспецифичность,

чувствительностьистинный положительный показатель: пропорции фактических положительных значений правильно определены.

специфичностьявляется истинным отрицательным показателем: доля фактических отрицательных значений правильно определена.

Давайте дадим некоторый контекст, чтобы лучше понять. Используя проблему обнаружения мошенничества,чувствительностьдоля мошеннических операций, определенных как мошенническиеспецифичностьэто доля не мошеннических операций, определенных как не мошеннические.

Поэтому в идеальной ситуации нам нужна высокая чувствительность и специфичность, хотя это может измениться в зависимости от контекста. Например, банк может пожелать установить более высокую чувствительность, а не специфичность, чтобы убедиться, что он идентифицирует мошеннические транзакции.

Кривая ROC(рабочая характеристика приемника) подходит для отображения двух типов метрик ошибок, описанных выше. Общая производительность классификатора определяется областью под кривой ROC (ППК). В идеале он должен охватывать верхний левый угол графика и иметь область, близкую к 1.


Пример кривой ROC. Прямая линия является базовой моделью

Квадратичный Дискриминантный Анализ (QDA)

Здесь мы придерживаемся тех же предположений, что и для LDA, но теперь каждое наблюдениеКТИкласс имеет свою собственную ковариационную матрицу

Для QDA дискриминант выражается как:


Дискриминантное уравнение для QDA

Без каких-либо сюрпризов вы заметите, что уравнение теперь квадратичное.

Но почему стоит выбирать QDA вместо LDA?

QDA — лучший вариант для больших наборов данных, так как он имеет тенденцию к меньшему смещению и большей дисперсии.

С другой стороны, LDA больше подходит для небольших наборов данных и имеет более высокое смещение и более низкую дисперсию.

проект

Большой! Теперь, когда мы глубоко понимаем, как работают логистическая регрессия, LDA и QDA, давайте применим каждый алгоритм для решения проблемы классификации.

LDA для более чем одного предсказателя

Расширяя теперь для нескольких предикторов, мы должны предположить, чтоИксвзят измногомерное распределение Гаусса, с классом среднего вектора и общей ковариационной матрицей.

Пример коррелированного и некоррелированного гауссовского распределения показан ниже.


Слева: некоррелированное нормальное распределение. Справа: коррелированное нормальное распределение

Теперь, выражая дискриминантное уравнение с помощью векторной записи, получим:


Дискриминантное уравнение с матричной нотацией

Как видите, уравнение остается прежним. Только на этот раз мы используем векторную нотацию для размещения многих предикторов.

Deleting Attributes and Objects

Any attribute of an object can be deleted anytime, using the statement. Try the following on the Python shell to see the output.

We can even delete the object itself, using the del statement.

Actually, it is more complicated than that. When we do , a new instance object is created in memory and the name c1 binds with it.

On the command , this binding is removed and the name c1 is deleted from the corresponding namespace. The object however continues to exist in memory and if no other name is bound to it, it is later automatically destroyed.

This automatic destruction of unreferenced objects in Python is also called garbage collection.

Deleting objects in Python removes the name binding

Принципы ООП

Абстракция

Абстракция — это выделение основных, наиболее значимых характеристик объекта и игнорирование второстепенных.

Любой составной объект реального мира — это абстракция. Говоря «ноутбук», вам не требуется дальнейших пояснений, вроде того, что это организованный набор пластика, металла, жидкокристаллического дисплея и микросхем. Абстракция позволяет игнорировать нерелевантные детали, поэтому для нашего сознания это один из главных способов справляться со сложностью реального мира. Если б, подходя к холодильнику, вы должны были иметь дело с отдельно металлом корпуса, пластиковыми фрагментами, лакокрасочным слоем и мотором, вы вряд ли смогли бы достать из морозилки замороженную клубнику.

Полиморфизм

Полиморфизм подразумевает возможность нескольких реализаций одной идеи. Простой пример: у вас есть класс «Персонаж», а у него есть метод «Атаковать». Для воина это будет означать удар мечом, для рейнджера — выстрел из лука, а для волшебника — чтение заклинания «Огненный Шар». В сущности, все эти три действия — атака, но в программном коде они будут реализованы совершенно по-разному.

Наследование

Это способность одного класса расширять понятие другого, и главный механизм повторного использования кода в ООП. Вернёмся к нашему автосимулятору. На уровне абстракции «Автотранспорт» мы не учитываем особенности каждого конкретного вида транспортного средства, а рассматриваем их «в целом». Если же более детализировано приглядеться, например, к грузовикам, то окажется, что у них есть такие свойства и возможности, которых нет ни у легковых, ни у пассажирских машин. Но, при этом, они всё ещё обладают всеми другими характеристиками, присущими автотранспорту.

Мы могли бы сделать отдельный класс «Грузовик», который является наследником «Автотранспорта». Объекты этого класса могли бы определять все прошлые атрибуты (цвет, год выпуска), но и получить новые. Для грузовиков это могли быть грузоподъёмность, снаряженная масса и наличие жилого отсека в кабине. А методом, который есть только у грузовиков, могла быть функция сцепления и отцепления прицепа.

Инкапсуляция

Инкапсуляция — это ещё один принцип, который нужен для безопасности и управления сложностью кода. Инкапсуляция блокирует доступ к деталям сложной концепции. Абстракция подразумевает возможность рассмотреть объект с общей точки зрения, а инкапсуляция не позволяет рассматривать этот объект с какой-либо другой.

Вы разработали для муниципальных служб класс «Квартира». У неё есть свойства вроде адреса, метража и высоты потолков. И методы, такие как получение информации о каждом из этих свойств и, главное, метод, реализующий постановку на учёт в Росреестре. Это готовая концепция, и вам не нужно чтобы кто-то мог добавлять методы «открыть дверь» и «получить место хранения денег». Это А) Небезопасно и Б) Избыточно, а также, в рамках выбранной реализации, не нужно. Работникам Росреестра не требуется заходить к вам домой, чтобы узнать высоту потолков — они пользуются только теми документами, которые вы сами им предоставили.

Определение конструктора для класса

Если вы заметили реализацию класса Employee, невозможно установить значение employee_id. Мы можем определить отдельный метод для установки значения employee_id. Но это обязательное свойство объекта Employee. Лучшее место для установки этих свойств — через конструктор.

Давайте продолжим и создадим конструктор для класса Employee. Мы ожидаем, что вызывающая программа передаст значение employee_id в качестве аргумента.

class Employee:

    def __init__(self, i):
        self.employee_id = i

    def work(self):
        print(f'{self.employee_id} is working')


emp = Employee(100)
emp.work()

Выход:

Примечание: предыдущий код для создания объекта Employee теперь не будет работать, потому что конструктор Employee ожидает аргумент. Если мы вызовем , он вызовет ошибку TypeError: в init() отсутствует 1 обязательный позиционный аргумент: ‘id’.

Можем ли мы иметь несколько конструкторов?

В отличие от других популярных объектно-ориентированных языков программирования, Python не поддерживает перегрузку методов и конструкторов.

Однако, если мы определим несколько конструкторов в классе, это не вызовет никаких ошибок. Последний конструктор перезапишет ранее определенное определение конструктора. Давайте посмотрим на это на примере.

class Employee:

    def __init__(self, id):
        self.employee_id = id
    
    # this will overwrite earlier defined constructor
    def __init__(self, id, n):  
        self.employee_id = id
        self.emp_name = n

    def work(self):
        print(f'{self.emp_name} is working')


emp = Employee(100, 'Pankaj')
emp.work()

emp = Employee(100)  # will raise Error
emp.work()

Вывод:

Pankaj is working
Traceback (most recent call last):
  File "/Users/pankaj/Documents/PycharmProjects/AskPython/hello-world/class_examples.py", line 19, in <module>
    emp = Employee(100)
TypeError: __init__() missing 1 required positional argument: 'n'

Уничтожение объектов (Сборка мусора)

Python автоматически удаляет ненужные объекты (встроенные типы или экземпляры классов), чтобы освободить пространство памяти. Процесс, посредством которого Python периодически восстанавливает блоки памяти, которые больше не используются, называется сборкой мусора.

Сборщик мусора в Python запускается во время выполнения программы и запускается, когда счетчик ссылок на объект достигает нуля. Количество ссылок объекта изменяется по мере изменения количества псевдонимов, которые на него указывают.

Счетчик ссылок на объект увеличивается, когда ему присваивается новое имя или он помещается в контейнер (список, кортеж или словарь). Счетчик ссылок объекта уменьшается, когда он удаляется с помощью del , его ссылка переназначается или его ссылка выходит за пределы области видимости. Когда счетчик ссылок объекта достигает нуля, Python собирает его автоматически.

a = 40      # Create object <40>
b = a       # Increase ref. count  of <40> 
c =      # Increase ref. count  of <40> 

del a       # Decrease ref. count  of <40>
b = 100     # Decrease ref. count  of <40> 
c = -1   # Decrease ref. count  of <40>

Обычно вы не замечаете, когда сборщик мусора уничтожает потерянный экземпляр и освобождает его пространство. Но класс может реализовать специальный метод __del __ () , называемый деструктором, который вызывается, когда экземпляр собирается быть уничтоженным. Этот метод может использоваться для очистки любых ресурсов памяти, используемых экземпляром.

Пример

Этот деструктор __del __ () печатает имя класса экземпляра, который должен быть уничтожен

#!/usr/bin/python

class Point:
   def __init__( self, x=0, y=0):
      self.x = x
      self.y = y
   def __del__(self):
      class_name = self.__class__.__name__
      print class_name, "destroyed"

pt1 = Point()
pt2 = pt1
pt3 = pt1
print id(pt1), id(pt2), id(pt3) # prints the ids of the obejcts
del pt1
del pt2
del pt3

Когда приведенный выше код выполняется, он дает следующий результат

3083401324 3083401324 3083401324
Point destroyed

Примечание. В идеале вы должны определять свои классы в отдельном файле, а затем импортировать их в основной файл программы с помощью оператора import .

Constructors in Python

Class functions that begin with double underscore are called special functions as they have special meaning.

Of one particular interest is the function. This special function gets called whenever a new object of that class is instantiated.

This type of function is also called constructors in Object Oriented Programming (OOP). We normally use it to initialize all the variables.

Output

2+3j
(5, 0, 10)
Traceback (most recent call last):
  File "<string>", line 27, in <module>
    print(num1.attr)
AttributeError: 'ComplexNumber' object has no attribute 'attr'

In the above example, we defined a new class to represent complex numbers. It has two functions, to initialize the variables (defaults to zero) and to display the number properly.

An interesting thing to note in the above step is that attributes of an object can be created on the fly. We created a new attribute attr for object num2 and read it as well. But this does not create that attribute for object num1.

Принципы ООП

Объектно-ориентированный язык работает по следующим принципам:

  • Все данные представляются объектами
  • Программа является набором взаимодействующих объектов, посылающих друг другу сообщения
  • Каждый объект имеет собственную часть памяти и может иметь в составе другие объекты
  • Каждый объект имеет тип
  • Объекты одного типа могут принимать одни и те же сообщения (и выполнять одни и те же действия)

Идеи/принципы объектно-ориентированного программирования:

  1. Наследование. Возможность выделять общие свойства и методы классов в один класс верхнего уровня (родительский). Классы, имеющие общего родителя, различаются между собой за счет включения в них различных дополнительных свойств и методов.
  2. Инкапсуляция. Свойства и методы класса делятся на доступные из вне (опубликованные) и недоступные (защищенные). Защищенные атрибуты нельзя изменить, находясь вне класса. Опубликованные же атрибуты также называют интерфейсом объекта, т. к. с их помощью с объектом можно взаимодействовать. По идеи, инкапсуляция призвана обеспечить надежность программы, т.к. изменить существенные для существования объекта атрибуты становится невозможно.
  3. Полиморфизм. Полиморфизм подразумевает замещение атрибутов, описанных ранее в других классах: имя атрибута остается прежним, а реализация уже другой. Полиморфизм позволяет специализировать (адаптировать) классы, оставляя при этом единый интерфейс взаимодействия.

Преимущества ООП

В связи со своими особенностями объектно-ориентированное программирование имеет ряд преимуществ перед структурным (и др.) программированием. Выделим некоторые из них:

  1. Использование одного и того же программного кода с разными данными. Классы позволяют создавать множество объектов, каждый из которых имеет собственные значения атрибутов. Нет потребности вводить множество переменных, т.к объекты получают в свое распоряжение индивидуальные так называемые пространства имен. Пространство имен конкретного объекта формируется на основе класса, от которого он был создан, а также от всех родительских классов данного класса. Объект можно представить как некую упаковку данных.
  2. Наследование и полиморфизм позволяют не писать новый код, а настраивать уже существующий, за счет добавления и переопределения атрибутов. Это ведет к сокращению объема исходного кода.

Особенность ООП

ООП позволяет сократить время на написание исходного кода, однако ООП всегда предполагает большую роль предварительного анализа предметной области, предварительного проектирования. От правильности решений на этом предварительном этапе зависит куда больше,чем от непосредственного написания исходного кода.

Особенности ООП в Python

По сравнению с другими распространенными языками программирования у Python можно выделить следующие особенности, связанные с объектно-ориентированным программированием:

  1. Любое данное (значение) — это объект. Число, строка, список, массив и др. — все является объектом. Бываю объекты встроенных классов (как те,что перечисленные в предыдущем предложении), а бывают объекты пользовательских классов (тех, что создает программист). Для единого механизма взаимодействия предусмотрены методы перегрузки операторов.
  2. Класс — это тоже объект с собственным пространством имен. Это нигде не было указано в данном цикле уроков. Однако это так. Поэтому правильнее было употреблять вместо слова «объект», слово «экземпляр». И говорить «экземпляр объекта», подразумевая под этим созданный на основе класса именно объект, и «экземпляр класса», имея ввиду сам класс как объект.
  3. Инкапсуляции в Python не уделяется особого внимания. В других языках программирования обычно нельзя получить напрямую доступ к свойству, описанному в классе. Для его изменения может быть предусмотрен специальный метод. В Python же это легко сделать, просто обратившись к свойству класса из вне. Несмотря на это в Python все-таки предусмотрены специальные способы ограничения доступа к переменным в классе.

Создание Вложенных Классов В Python

В этом разделе мы в первую очередь сосредоточимся на создании вложенных классов. Для этого давайте рассмотрим пример.

class language: 
  def __init__(self): 
   
   .specification() 
  def show(self): 
    print("Language:", self.language) 
  class specification: 
     def __init__(self): 
       
       
     def display(self): 
        print("type:", self.type) 
        print("Founded:", self.founded) 
 
 () 
out.show() .lg 
ppool.display()
Language: PYTHON
type: HIGH-LEVEL
Founded: 1991

Здесь выше мы успешно создали вложенный класс . Теперь давайте пройдемся строчка за строчкой и поймем, что мы это сделали. Итак, сначала мы создали класс с именем language. Внутри него мы использовали ключевое слово self. Ключевое слово self-это ключ, через который мы можем получить доступ к атрибутам и методам aнашего созданного класса. Внутри класса language мы создали еще один вложенный класс под названием specification. Там мы точно так же определили спецификации. Наконец, мы получаем желаемый результат.

Конструктор класса — метод __init__

Большинство классов имеют специальный метод, который автоматически при создании объекта создает ему атрибуты. Т.е. вызывать данный метод не нужно, т.к. он сам запускается при вызове класса. (Вызов класса происходит, когда создается объект.)

Такой метод называется конструктором класса и в языке программирования Python носит имя __init__. (В начале и конце по два знака подчеркивания.)

Первым параметром, как и у любого другого метода, у __init__ является self, на место которого подставляется объект в момент его создания. Второй и последующие (если есть) параметры заменяются аргументами, переданными в конструктор при вызове класса. Рассмотрим два класса: в одном будет использоваться конструктор, а в другом нет. Требуется создать два атрибута объекта.

Рассмотрим два класса: в одном будет использоваться конструктор, а в другом нет. Требуется создать два атрибута объекта.

Пример 1:

class YesInit:
    def __init__(self,one,two):
        self.fname = one
        self.sname = two

obj1 = YesInit("Peter","Ok")
print (obj1.fname, obj1.sname)

Пример 2:

class NoInit:
    def names(self,one,two):
        self.fname = one
        self.sname = two

obj2 = NoInit()
obj2.names("Peter","Ok")

print (obj2.fname, obj2.sname)

Результат выполнения двух скриптов:

Peter Ok

Кавычки

Одинарные кавычки

Строку можно указать, используя одинарные кавычки, как например, ‘Это строка’.  Любой одиночный символ в кавычках, например,  ‘ю’  — это строка. Пустая строка » — это тоже строка. То есть строкой мы считаем всё, что находится внутри кавычек.

Двойные кавычки

Запись строки в одинарных кавычках  это не единственный способ. Можно использовать и двойные кавычки, как например, »Это строка».  Для интерпретатора разницы между записями строки в одинарных и двойных кавычках нет.  

ВниманиеЕсли  строка началась с двойной кавычки — значит и закончиться должна на двойной кавычке. Если внутри строки мы хотим использовать двойные кавычки, то саму строку надо делать в одинарных кавычках. 

Театр »Современник»print(‘Театр »Современник»’)

Тройные кавычки

Строка, занимающая несколько строк,  должна быть обрамлена тройными кавычками (» » »  или »’).  Например:

Способ 1 – Использование функции DIR () для перечисления методов в классе

Чтобы перечислить методы этого класса, один подход – использовать функцию DIR () в Python.

Функция вернет все функции и свойства класса.

Посмотрим, что произойдет, если мы попробуем это для Отказ

print(dir(MyClass))

Выход

Хорошо, мы видим, что у нас есть наш , , и Методы перечислены! Однако как насчет всех других методов?

Ну, эти методы (те, которые начинаются с двойного поднятия), называются Методы гуляния Отказ

Они обычно называются функцией обертки. Например, Функция вызывает метод.

Фильтрация расположенных методов от выхода

Обычно нам не понадобится префиксные методы двойной подчеркивания, поэтому мы можем отфильтровать их с помощью приведенного ниже фрагмента:

method_list = 
print(method_list)

Выход

Ух ты! Теперь мы только получаем арифметические методы, которые мы хотели!

Однако наше настоящее решение имеет проблему.

Помните, что Вызывает как методы, так и свойства класса?

Обращение с свойствами класса

Если бы у нас была собственность внутри класса, он тоже будет перечислять. Рассмотрим ниже пример.

class MyClass(object):

    # MyClass property
    property1 = 

    def __init__(self, a):
        assert isinstance(a, float) or isinstance(a, int)
        self.state = a


    def add(self, a):
        assert isinstance(a, float) or isinstance(a, int)
        self.state = self.state + a
        return self.state


    def subtract(self, a):
        assert isinstance(a, float) or isinstance(a, int)
        self.state = self.state - a
        return self.state


    def multiply(self, a):
        assert isinstance(a, float) or isinstance(a, int)
        self.state = self.state * a
        return self.state


    def divide(self, a):
        assert isinstance(a, float) or isinstance(a, int)
        self.state = self.state / a
        return self.state


    @staticmethod
    def global_method(a, b):
        return a + b


    @classmethod
    def myclass_method(cls):
        return cls


method_list = 
print(method_list)

Теперь, что вы думаете, что вывод будет?

Выход

Это дает нам Также, что не то, что мы хотим.

Нам нужно сделать еще один фильтр для дифференцировки между методом и свойством.

Но это действительно просто. Основное отличие состоит в том, что любой объект недвижимости Не Callable, в то время как методы можно назвать!

В Python мы можем использовать булевую функцию Чтобы проверить, можно ли назвать атрибут.

Давайте теперь включаем это в наш старый код.

method_list = 
print(method_list)

Давайте сломаемся, написав его без понимания списка:

method_list = []

# attribute is a string representing the attribute name
for attribute in dir(MyClass):
    # Get the attribute value
    attribute_value = getattr(MyClass, attribute)
    # Check that it is callable
    if callable(attribute_value):
        # Filter all dunder (__ prefix) methods
        if attribute.startswith('__') == False:
            method_list.append(attribute)

print(method_list)

Мы также изменили к Так что это удаляет вводящее в заблуждение намерения!

Давайте проверим это сейчас.

Выход

Действительно, мы действительно получим свой список методов без свойств!

Классы

Класс – это прототип объекта.

В коде классы определяются ключевым словом class.

Создайте файл shark.py. Попробуйте определить класс Shark с двумя функциями:

Определяемые в классе функции называются методами.

В данном случае в качестве аргумента используется слово self – оно ссылается на объекты, основанные на этом классе. Для этого параметр self должен всегда быть первым в функции (но не обязательно единственным её параметром).

Новый класс Shark пока что не создал ни одного объекта Shark. То есть, если вы запустите программу shark.py, ничего не произойдёт.

Теперь у вас есть шаблон для создания объектов.

Class Methods

You can define as many methods as you want in a class using the keyword.
Each method must have the first parameter, generally named as , which refers to the calling instance.

Example: Class Method
Copy

is just a conventional name for the first argument of a method in the class.
A method defined as should be called as for the object of the class.

The above class method can be called as a normal function, as shown below.

Example: Class Method
Copy

The first parameter of the method need not be named . You can give any name that refers to the instance of the calling method.
The following method names the first parameter as instead of and that works perfectly fine.

Example: Class Method
Copy

Defining a method in the class without the parameter would raise an exception when calling a method.

Example: Class Method
Copy

The method can access instance attributes using the parameter.

Example: Class Method
Copy

You can now invoke the method, as shown below.

Example: Calling a Method
Copy

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector