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的地址不一样,这是不是一个指针