1、两种编程方式:

面向过程:流水线思维。

面向对象:类、对象、对象之间的交互。

2、类的相关概念:

1)名称:类、对象、实例、实例化;

2)类:具有相同特征的一类事物;

3)对象、实例: 实例化的一个实例;

4)实例化:对象的过程。

面向对象:解决了程序的可扩展性。对某一个对象单独的修改,立即反映到整个系统中。

缺点:可控性差。面向对象一开始就由对象之间的交互解决问题。

3、类、对象:

在Python中,一切皆对象。

dict              # 类
d = {'k': 'v'}    # 对象

print(dict)       # <class 'dict'>
print(d)

list               # 类
lst = [1, 2]       # 对象

print(list)       # <class 'dict'>
print(lst)

在Python中,用变量表示特征,用函数表示功能,因而具有相同特征和功能的一类事物,就是类。数据类型就是类,具体到一个具体的值,那就是一个对象。

4、声明类:

class Person:
    role = 'Person'

    def walk(self):
        print('Person is walking...')

5、类有两种作用:属性引用和实例化。

1)属性引用:

class Person:
    role = 'Person'

    def walk(self):
        print('Person is walking...')


# 查看Person类的role属性,属性引用
print(Person.role)

# 引用Person类的walk方法,这里不是调用walk方法,如果是调用方法的话,就有括号
print(Person.walk)

6、实例化:类名加括号就是实例化,依据类创造出一个对象,会自动触发__init__函数的运行,类似C++中的构造函数,可以用它来为每个实例定制自己的属性。

过程:

1)类名()首先会创造一个对象,创建一个self变量;

2)调用init方法,类名括号里的参数会被这里接收;

3)执行init方法;

3)返回self;

class Person:
    
    def __init__(self, name):   # 类名括号里的参数会被__init__函数这里self接收
        self.name = name        # 最后返回self

    def walk(self):
        print('Person is walking...')

实例化的过程就是类生成对象的过程。

语法:对象=类名(参数)

class Person:

    def __init__(self, name):
        self.name = name

    def walk(self):
        print('Person is walking...')


# 实例化一个对象chang
chang = Person('chang')

# 打印chang对象的name属性
print(chang.name)

#
Person.walk(chang)

# chang对象调用walk方法,对象.方法名()
chang.walk()

7、类属性的补充:

一:我们定义的类的属性到底存到哪里了?有两种方式查看
dir(类名):查出的是一个名字列表
类名.__dict__:查出的是一个字典,key为属性名,value为属性值

二:特殊的类属性
类名.__name__# 类的名字(字符串)
类名.__doc__# 类的文档字符串
类名.__base__# 类的第一个父类(在讲继承时会讲)
类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)
类名.__dict__# 类的字典属性
类名.__module__# 类定义所在的模块
类名.__class__# 实例对应的类(仅新式类中)

8、面向对象的一个小结:

class 类名:
    def __init__(self,参数1,参数2):
        self.对象的属性1 = 参数1
        self.对象的属性2 = 参数2

    def 方法名(self):pass

    def 方法名2(self):pass

对象名 = 类名(1,2)  #对象就是实例,代表一个具体的东西
                  #类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法
                  #括号里传参数,参数不需要传self,其他与init中的形参一一对应
                  #结果返回一个对象
对象名.对象的属性1   #查看对象的属性,直接用 对象名.属性名 即可
对象名.方法名()     #调用类中的方法,直接用 对象名.方法名() 即可

补充一个对self理解的内容:

class Person:
    def __init__(self, name, age):
        print(self.__dict__)       # 开始self字典中的值
        self.name = name
        self.age = age
        print(self.__dict__)       # 赋值之后self字典中的值
        print(id(self))            # 对比下self和p的地址

    def walk(self):
        print('Walking.')


p = Person('chang', 28)
print(id(p))                       # self和p的值的内存地址是一样的
print(p.name)
print(id(p.walk))                # 再看下walk在内存中的地址,跟self和p的地址不一样,这是不是一个指针