初识:
-
面向对象的程序设计的
-
优点是:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。
-
缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法预测最终结果。
-
-
应用场景:
- 需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方。
在python 中面向对象的程序设计并不是全部。
面向对象编程可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率 ,另外,基于面向对象的程序可以使它人更加容易理解你的代码逻辑,从而使团队开发变得更从容。
了解一些名词:类、对象、实例、实例化
一、类的相关知识
- 声明
def funcName(arg):
'函数文档字符串'
函数体
'''
class 类名:
'类文档字符串'
类体:两部分:变量部分,方法(函数)部分
'''
#创建一个类
class A:
pass
- 属性
class Person: #创建一个人类
role = 'person' # 变量,静态变量,静态属性
def walk(self): #方法,函数,动态变量
print("走")
print(Person.role) #查看人的role属性
print(Person.walk) #引用人的走路方法,注意,这里不是在调用
- 实例化:类名加括号就是实例化,会自动触发__init__函数的运行,可以用它来为每个实例定制自己的特征
class Person:
'''类体:两部分:变量部分,方法(函数)部分'''
mind = '有思想' # 变量,静态变量,静态属性
animal = '高级动物'
faith = '有信仰'
def __init__(self):
print(self)
print(666)
def work(self): # 方法,函数,动态变量
print(self)
print('人类都会工作...')
def shop(self):
print('人类可以消费....')
# 类名的角度
# 操作类中的静态变量
# 1, Person.__dict__ 查询类中的所有的内容 (不能进行增删改操作)
print(Person.__dict__)
print(Person.__dict__['faith'])
print(Person.__dict__['mind'])
# 2, 万能的. 对类中的单个的变量进行增删改查,用点
print(Person.mind)
print(Person.animal) # 查
Person.money = '运用货币' # 增
Person.mind = '无脑的' # 改
del Person.mind
print(Person.__dict__)
#操作类中的方法 (基本不用类名去操作)
Person.work(111)
# 对象的角度
ret = Person() #类名+()的这个过程:实例化的过程(创建一个对象的过程)
# Person() 实例化对象,实例,对象.
#只要类名+() 产生一个对象,自动执行类中的__init__方法.
----------------------------------------------------------
class Person:
'''类体:两部分:变量部分,方法(函数)部分'''
mind = '有思想' # 变量,静态变量,静态字段
animal = '高级动物'
faith = '有信仰'
def __init__(self,name,age,hobby):
self.name = name # Person.money = '运用货币'
self.age = age
self.hobby = hobby
def work(self): # 方法,函数,动态变量
print('%s都会工作...' %self.name)
def shop(self):
print('人类可以消费....')
# 操作对象中的静态变量
#1, __dict__ 查询对象中的所有的内容
print(ret.__dict__)
#2, 万能的. 对类中的单个的变量进行增删改查,用点
print(ret.name) # 查
ret.high = 175 # 增
del ret.name # 删
ret.age = 73 # 改
print(ret.__dict__)
# 对象调用类中的方法 (一般都是通过对象执行类中的方法,而不是通过类名)
ret.shop()
ret.work()
- self:
- 在实例化时自动将对象/实例本身传给__init__的第一个参数。
- 类属性的补充
一:我们定义的类的属性到底存到哪里了?有两种方式查看
dir(类名):查出的是一个名字列表
类名.__dict__:查出的是一个字典,key为属性名,value为属性值
二:特殊的类属性
类名.__name__# 类的名字(字符串)
类名.__doc__# 类的文档字符串
类名.__base__# 类的第一个父类
类名.__bases__# 类所有父类构成的元组
类名.__dict__# 类的字典属性
类名.__module__# 类定义所在的模块
类名.__class__# 实例对应的类(仅新式类中)