моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Оглавление
1. Концепции объектно-ориентированного программирования (ООП)
1.1 Что такое классы и объекты?
1.3 Связь между классами и объектами
2.2 Абстрактные классы и методы
3.1 Определение класса и создание экземпляра
7.2 Использование интроспекции для динамических операций
8. Статические методы и методы класса
Объектно-ориентированное программирование (ООП) Парадигма программирования, реализуемая путем организации программ в коллекции объектов. Объекты содержат не только данные, но и методы управления этими данными. Основные концепции ООП включают классы, объекты, свойства и методы.
- Сорт Это шаблон или чертеж, используемый для создания объектов. Классы определяют свойства и поведение объектов.
- Объект Является экземпляром класса. Создание объекта — это создание конкретного экземпляра на основе класса.
пример:
- class Dog:
- # 类的初始化方法
- def __init__(self, name, age):
- self.name = name # 属性
- self.age = age # 属性
-
- # 方法
- def bark(self):
- return f"{self.name} says Woof!"
-
- # 创建对象
- my_dog = Dog("Rex", 5)
- print(my_dog.bark())
В Python занятия проходят class
Определение ключевого слова. Функции в классе называются методами, а переменные — свойствами.Методы класса обычно начинаются сself
В качестве первого параметра представляет сам экземпляр.
пример:
- class Cat:
- def __init__(self, name):
- self.name = name
-
- def meow(self):
- return f"{self.name} says Meow!"
-
- # 创建对象
- my_cat = Cat("Whiskers")
- print(my_cat.meow())
Класс является шаблоном объекта и определяет структуру и поведение объекта. Объекты являются экземплярами классов, и каждый объект имеет независимые свойства и методы.
- class Person:
- def __init__(self, name, age):
- self.name = name
- self.age = age
-
- def greet(self):
- return f"Hello, my name is {self.name} and I am {self.age} years old."
-
- # 创建多个对象
- person1 = Person("Alice", 30)
- person2 = Person("Bob", 25)
-
- print(person1.greet())
- print(person2.greet())
Класс похож на форму для печенья: он определяет форму и размер печенья. Объекты подобны бетонному печенью, изготовленному из формы. Каждое печенье может иметь разные вкусы (свойства), но их форма и размер (структура и поведение) одинаковы.
абстрактный Это относится к упрощению сложных реальных проблем путем выделения основных особенностей и игнорирования деталей. В программировании абстракция помогает нам создавать более краткий и удобный в сопровождении код.
Абстракция — это извлечение основных особенностей объекта, игнорируя несущественные детали. С помощью абстракции мы можем сосредоточиться на основной функциональности объекта, не отвлекаясь на второстепенные функции.
пример:
- class Animal:
- def __init__(self, name):
- self.name = name
-
- def make_sound(self):
- pass # 抽象方法,不具体实现
-
- class Dog(Animal):
- def make_sound(self):
- return "Woof!"
-
- class Cat(Animal):
- def make_sound(self):
- return "Meow!"
-
- # 创建对象
- dog = Dog("Rex")
- cat = Cat("Whiskers")
-
- print(dog.make_sound())
- print(cat.make_sound())
В Python мы можем достичь абстракции, определяя абстрактные классы и абстрактные методы. Абстрактные классы не могут быть созданы, а только унаследованы. Абстрактные методы определены в абстрактном классе, но реализованы в подклассах.
пример:
- from abc import ABC, abstractmethod
-
- class Vehicle(ABC):
- @abstractmethod
- def start_engine(self):
- pass
-
- class Car(Vehicle):
- def start_engine(self):
- return "Car engine started"
-
- class Motorcycle(Vehicle):
- def start_engine(self):
- return "Motorcycle engine started"
-
- # 创建对象
- car = Car()
- motorcycle = Motorcycle()
-
- print(car.start_engine())
- print(motorcycle.start_engine())
Абстракция – это как сведение сложной картины к геометрическим формам. Например, конкретная кошка имеет множество характеристик (цвет шерсти, размер, возраст и т. д.), но мы ориентируемся только на характеристику мяуканья. Это абстракция кошки.
Классы и экземпляры Это основа ООП. Классы — это шаблоны, а экземпляры — конкретные объекты. Экземпляры создаются из класса и имеют свойства и методы, определенные этим классом.
Определение класса и создание экземпляра — это основные операции ООП. Классы определяют свойства и методы, а экземпляры — это конкретные объекты класса.
пример:
- class Student:
- def __init__(self, name, grade):
- self.name = name
- self.grade = grade
-
- def introduce(self):
- return f"Hi, I am {self.name} and I am in grade {self.grade}."
-
- # 创建实例
- student1 = Student("Alice", 10)
- student2 = Student("Bob", 12)
-
- print(student1.introduce())
- print(student2.introduce())
Атрибуты класса — это состояние объекта, а методы — это поведение объекта.Атрибуты класса проходят__init__
Инициализация метода, метод определен в классе.
пример:
- class Book:
- def __init__(self, title, author):
- self.title = title
- self.author = author
-
- def get_info(self):
- return f"'{self.title}' by {self.author}"
-
- # 创建实例
- book = Book("1984", "George Orwell")
- print(book.get_info())
Классы и экземпляры подобны рисунку дома и реальному дому. Чертежи (классы) определяют структуру и функциональность дома, а сам дом (экземпляр) представляет собой конкретный объект, построенный по чертежам.
инкапсуляция Он скрывает статус объекта (свойства) и поведение (методы) внутри класса и взаимодействует с внешним миром через интерфейс (методы). Инкапсуляция повышает безопасность и удобство сопровождения кода.
Инкапсуляция — одна из основных концепций ООП. Она защищает данные объекта, скрывая внутреннее состояние объекта и раскрывая только необходимые интерфейсы. Таким образом, внешний код не может напрямую получить доступ к внутреннему состоянию объекта или изменить его и может манипулировать данными только с помощью методов, предоставляемых объектом.
пример:
- class Account:
- def __init__(self, owner, balance=0):
- self.owner = owner
- self.__balance = balance # 私有属性
-
- def deposit(self, amount):
- if amount > 0:
- self.__balance += amount
- else:
- raise ValueError("Deposit amount must be positive")
-
- def withdraw(self, amount):
- if 0 < amount <= self.__balance:
- self.__balance -= amount
- else:
- raise ValueError("Insufficient funds or invalid amount")
-
- def get_balance(self):
- return self.__balance
-
- # 创建实例
- account = Account("John")
- account.deposit(100)
- print(account.get_balance())
Интерфейс — это единственный способ взаимодействия объекта с внешним миром. Через интерфейсы внешний код может вызывать методы объекта, но не может напрямую обращаться к внутреннему состоянию объекта.
пример:
- class Car:
- def __init__(self, model):
- self.model = model
- self.__engine_started = False
-
- def start_engine(self):
- if not self.__engine_started:
- self.__engine_started = True
- return "Engine started"
- else:
- return "Engine is already running"
-
- def stop_engine(self):
- if self.__engine_started:
- self.__engine_started = False
- return "Engine stopped"
- else:
- return "Engine is not running"
-
- # 创建实例
- car = Car("Toyota")
- print(car.start_engine())
- print(car.stop_engine())
Упаковка напоминает корпус мобильного телефона. Схемы и компоненты (состояние объекта) внутри мобильного телефона заключены в корпус. Пользователь может взаимодействовать с мобильным телефоном только через кнопки и экран (интерфейс), но не может напрямую контактировать с внутренними компонентами.
наследовать Это еще одна основная концепция ООП, которая позволяет нам создать новый класс на основе существующего класса. Новый класс наследует все свойства и методы существующего класса.
Наследование — это когда один класс (подкласс) получает свойства и методы от другого класса (родительского класса). Посредством наследования подклассы могут повторно использовать код родительского класса, добавлять новые свойства и методы или переопределять методы родительского класса.
пример:
- class Animal:
- def __init__(self, name):
- self.name = name
-
- def speak(self):
- pass
-
- class Dog(Animal):
- def speak(self):
- return "Woof!"
-
- class Cat(Animal):
- def speak(self):
- return "Meow!"
-
- # 创建实例
- dog = Dog("Rex")
- cat = Cat("Whiskers")
-
- print(dog.speak())
- print(cat.speak())
Подкласс может переопределить метод родительского класса, то есть определить в подклассе метод с тем же именем, что и родительский класс, для выполнения различных функций.
пример:
- class Shape:
- def area(self):
- return 0
-
- class Rectangle(Shape):
- def __init__(self, width, height):
- self.width = width
- self.height = height
-
- def area(self):
- return self.width * self.height
-
- class Circle(Shape):
- def __init__(self, radius):
- self.radius = radius
-
- def area(self):
- return 3.14 * (self.radius ** 2)
-
- # 创建实例
- rectangle = Rectangle(3, 4)
- circle = Circle(5)
-
- print(rectangle.area())
- print(circle.area())
Наследование — это как наследство, данное родителями своим детям. Родители (родительский класс) передают свои свойства (свойства и методы) своим детям (подклассам), и дети могут не только использовать эти свойства, но и стать богаче собственными усилиями (добавлением новых свойств и методов).
Полиморфизм Это означает, что один и тот же метод имеет разное проявление на разных объектах. Полиморфизм позволяет нам вызывать методы разных объектов через один и тот же интерфейс для выполнения разных функций.
Полиморфизм — одна из важных особенностей ООП. Он указывает на объекты подкласса через ссылки на родительские классы, позволяя одному и тому же методу иметь разные реализации. Полиморфизм повышает гибкость и масштабируемость кода.
пример:
- class Animal:
- def speak(self):
- pass
-
- class Dog(Animal):
- def speak(self):
- return "Woof!"
-
- class Cat(Animal):
- def speak(self):
- return "Meow!"
-
- def animal_sound(animal):
- print(animal.speak())
-
- # 创建实例
- dog = Dog()
- cat = Cat()
-
- animal_sound(dog)
- animal_sound(cat)
В Python полиморфизм обычно реализуется посредством переопределения методов и ссылок на родительские классы. Указывая на объект подкласса через ссылку родительского класса, вы можете вызвать метод подкласса.
пример:
- class Shape:
- def draw(self):
- pass
-
- class Rectangle(Shape):
- def draw(self):
- return "Drawing a rectangle"
-
- class Circle(Shape):
- def draw(self):
- return "Drawing a circle"
-
- def draw_shape(shape):
- print(shape.draw())
-
- # 创建实例
- rectangle = Rectangle()
- circle = Circle()
-
- draw_shape(rectangle)
- draw_shape(circle)
Полиморфизм подобен универсальному пульту дистанционного управления. Будь то управление телевизором, кондиционером или стереосистемой, если эти устройства имеют соответствующие интерфейсы (методы), пульт дистанционного управления (ссылка на родительский класс) может реализовывать разные функции с помощью одних и тех же кнопок (вызовов методов).
самоанализ Это означает, что объект может знать свою собственную информацию во время выполнения. Python предоставляет некоторые встроенные функции для самоанализа, такие какtype()
、id()
、hasattr()
ждать.
Интроспекция означает, что объект может получать свою собственную информацию во время выполнения, такую как свойства, методы и т. д. Самоанализ делает программы Python очень динамичными и гибкими.
пример:
- class Person:
- def __init__(self, name, age):
- self.name = name
- self.age = age
-
- person = Person("Alice", 30)
-
- # 使用内置函数进行自省
- print(type(person))
- print(hasattr(person, "name"))
- print(getattr(person, "name"))
- setattr(person, "name", "Bob")
- print(person.name)
- delattr(person, "name")
С помощью самоанализа мы можем динамически манипулировать свойствами и методами объектов во время выполнения, делая программу более гибкой и динамичной.
пример:
- class Car:
- def __init__(self, model):
- self.model = model
- self.speed = 0
-
- def accelerate(self):
- self.speed += 5
- return self.speed
-
- car = Car("Toyota")
-
- # 动态操作对象
- if hasattr(car, "accelerate"):
- method = getattr(car, "accelerate")
- print(method())
- print(method())
-
- # 动态设置属性
- setattr(car, "color", "red")
- print(car.color)
Самоанализ подобен взгляду в зеркало. Через зеркало (механизм самоанализа) люди могут видеть, как они выглядят (свойства и методы объектов), и при необходимости вносить коррективы (динамическое манипулирование объектами).
статический метод иметод класса — это методы, связанные с классом, а не с экземпляром.использование статического метода@staticmethod
Декоратор, использование метода класса@classmethod
Декоратор.
Статический метод — это метод класса, но он не привязан ни к одному экземпляру класса. Статические методы не могут получать доступ к экземплярам класса и не могут изменять состояние класса. Обычно они используются для выполнения какой-то операции, не имеющей никакого отношения к классу, но логически принадлежащей функциональности класса.
пример:
- class Math:
- @staticmethod
- def add(a, b):
- return a + b
-
- print(Math.add(5, 3))
Методы класса — это методы, которые привязаны к классу, а не к экземпляру.Первым аргументом метода класса является сам класс, обычно называемыйcls
. Методы класса могут получать доступ к свойствам класса и другим методам класса.
пример:
- class Math:
- factor = 2
-
- @classmethod
- def multiply(cls, value):
- return cls.factor * value
-
- print(Math.multiply(5))
Все аспекты объектно-ориентированного программирования на Python, включая базовые концепции объектно-ориентированного программирования, абстракции, классы и экземпляры, инкапсуляцию, наследование, полиморфизм, самоанализ, а также статические методы и методы классов.
Я надеюсь, что этот подробный блог поможет вам глубже понять объектно-ориентированное программирование на Python и применить эти знания в реальных проектах. Если у вас есть какие-либо вопросы или вам нужна дополнительная помощь, пожалуйста, свяжитесь со мной!