Сегодня я познакомлю всех с « объектом ». Как мы все знаем, 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
- Две формы выражения: при определении атрибута класса, если он начинается с двух коротких подчеркиваний «__», это означает, что это частный атрибут, в противном случае это открытый атрибут. Например, self. Size = s - это частный атрибут, а self.price = money - публичный атрибут.
-
Открытый метод: вызов напрямую по имени объекта. Например, 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))
# 为什么会这样呢?因为实例属性将类属性给覆盖了,我们只能看到实例属性,不能看到类属性