Понимание Python в одной статье (6) ----- Классы и объекты

Сегодня я познакомлю всех с « объектом ». Как мы все знаем, Python - это объектно-ориентированный язык программирования. Большая часть причин, по которым Python настолько мощен, заключается в том, что в Python есть объекты повсюду. Можно видеть, что один из ключей к изучению Python - это изучение классов. и объекты. это хорошо! Шагните в тему.

1. Что такое класс и что такое объект

  • Определение
    класса A Класс включает:
    • 1. Атрибуты, описывающие статические свойства класса.
    • 2. Метод, описывающий действие класса - определение объекта.
  • Определение объекта
    Экземпляр структуры данных, определенной классом, также называется экземпляром объекта.
  • Маленький футляр
# 定义一个学生类
class Stu:
    numid = 2020000078
    name = 'djk'
    gender = 1
    def Print(self):
        print('我是一个学生!')
# 实例化一个对象stu
stu = Stu()
stu.Print()

Во-вторых, как определить класс

class Stu:
    def __init__(self,numid,name,gender,loc):
        self.numid = numid
        self.name = name
        self.gender = gender
        self.loc = loc
    def Print(self):
        print(self.numid,self.name,self.gender,self.loc)
# 实例化
stu = Stu(1,'djk',1,'shandong')
# 调用Print()函数
stu.Print()

Что касается того, почему здесь есть «я», вы можете прочитать другую мою статью, в которой это очень четко объясняется, и я не буду здесь подробно рассказывать об этом, и я также понимаю себя, сравнивая его с языком Java. Глубоко понять параметр self и метод __init __ (self) в Python - по аналогии с языком Java

Три, три характеристики объектно-ориентированного

3.1 Упаковка

Объект - это инкапсуляция, инкапсулирующая атрибуты и методы, принадлежащие объекту, в класс и разрешающая объекту доступ только изнутри!

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

  • Наследование - это механизм, с помощью которого подклассы автоматически обмениваются данными и методами между родительскими классами.
  • Тематическое исследование
class Parent:
    def Hello(self):
        print('正在调用父类的方法')
class Child(Parent):
    pass
p = Parent()
p.Hello()
c = Child()
c.Hello()

Вставьте описание изображения сюда

  • Если подкласс определяет методы и свойства с тем же именем, что и родительский класс, он автоматически переопределит свойства и методы, соответствующие родительскому классу.
  • Тематическое исследование
class Parent:
    def Hello(self):
        print('正在调用父类的方法')
class Child(Parent):
    def Hello(self):
        print('正在调用子类的方法')
p = Parent()
p.Hello()
c = Child()
c.Hello()

Вставьте описание изображения сюда

3.3 Полиморфизм

  • Что такое полиморфизм?
    Полиморфизм означает, что имя метода то же, но метод реализован по-другому.
  • Тематическое исследование
# 多态案例
class A():
    def fun(self):
        print('我是小A')
class B():
    def fun(self):
        print('我是小B')
a = A()
a.fun()
b = B()
b.fun()

Вставьте описание изображения сюда

4. Что является публичным, а что частным

  • В классе Class есть два атрибута переменных-членов: атрибуты экземпляра и атрибуты класса.

  • Атрибуты экземпляра определены в конструкторе (__init__) с префиксом self, когда они определены.

  • Атрибуты класса - это атрибуты, определенные вне методов в классе, но в самом классе. Атрибуты класса являются общими для всех экземпляров. Доступ как внутри, так и вне класса можно получить через «атрибут class. Class».

Две формы доступа: в основной программе к атрибутам экземпляра можно получить доступ только через имя объекта; в то время как к атрибутам класса можно получить доступ через имя класса или имя объекта.

  • Для общедоступных членов (методов и переменных) они могут использоваться публично как внутри, так и вне класса.

  • Для закрытых членов (методов и переменных) они могут использоваться только внутри класса, но к ним также можно получить доступ с помощью специальных методов, а именно «имя объекта._имя класса + частный член», book._Book__types.

    • Две формы выражения: при определении атрибута класса, если он начинается с двух коротких подчеркиваний «__», это означает, что это частный атрибут, в противном случае это открытый атрибут. Например, self. Size = s - это частный атрибут, а self.price = money - публичный атрибут.
      Частный метод: начинается с двух знаков подчеркивания "
      " и не может быть вызван напрямую по имени объекта. Он может быть вызван только самим собой в методах, принадлежащих объекту. Например, self._namemethod
  • Открытый метод: вызов напрямую по имени объекта. Например, a.printLcs

  • Статический метод: его можно вызвать по имени класса и имени объекта, но он не может напрямую обращаться к членам, принадлежащим объекту, только к членам, принадлежащим классу.

Пять, некоторые родственные BIF

Название метода Введение в метод
issubclass (класс, информация о классе) Если класс является подклассом classinfo, вернуть True
isinstance (объект, информация о классе) Проверить, принадлежит ли объект-экземпляр объекта к классу classinfo
hasattr (объект, имя) Проверить, имеет ли объект указанное имя атрибута
getattr (объект, имя [, по умолчанию]) Вернуть значение атрибута, указанное объектом. Если атрибут не существует, если установлено значение по умолчанию, будет распечатано значение по умолчанию; в противном случае будет выдано AttributeError.
setattr (объект, имя, значение) Задайте значение указанного атрибута в объекте. Если указанный атрибут не существует, будет создан новый атрибут, которому будет присвоено значение.
delattr (объект, имя) Удалите указанный атрибут в объекте; если указанный атрибут больше не существует, будет выдано исключение AttributeError.
свойство (fget = None, fset = None, fdel = None, fdoc = None) Установить атрибуты с самоопределенными атрибутами

Шесть, отношения между классом, объектом класса и объектом экземпляра

class C:
    count = 0
a = C()
b = C()
c = C()
print('a修改之前:{}'.format(a.count))
print('b修改之前:{}'.format(b.count))
print('c修改之前:{}'.format(c.count))
c.count += 10 # 修改的是实例对象c
print('c修改实例对象之后:{}'.format(c.count))
# 我们修改类对象
C.count += 100
print('a修改之后:{}'.format(a.count))
print('a修改之后:{}'.format(b.count))
print('c修改类对象之后:{}'.format(c.count))
# 为什么会这样呢?因为实例属性将类属性给覆盖了,我们只能看到实例属性,不能看到类属性

рекомендация

отblog.csdn.net/dongjinkun/article/details/113739258