@TOC
一、面向对象
1. 概念
==“类”:== 具有某些相同属性的一个集合。eg:将“人”定义为一个“类”。 ==“对象”:== 具有某些相同属性的一个集合中的一个元素,某个“类”当中的一个实体。eg:男生。 ==“面向对象编程”:== 是一种封装的思想,它可以更好地模拟真实世界里的事物(将其视为对象)。并把描述特征的数据和代码块(函数)封装到一起。 eg:可以先创建一个“人类”的概念,然后在这个概念当中再创建具体的某一个人(即一个对象),或者多个不同的人(即多个对象)。 最后再定义某个人可以做什么事(即这个人可以实现什么样的功能)。 ==属性:== 类中的所有变量称为属性。(比如人的大脑,四肢,五官等等) ==方法:== 类中的所有函数通常称为方法。(比如大脑有思考的功能,眼睛可以观看世界等等) ==常用名称:== class,init,self,object等。 ==三大特性:== 封装,继承,多态。 若在某游戏中设计一个乌龟(turtle)的角色。 使用面向对象的思想会更简单,可以分为如下两个方面进行描述:
- 从乌龟的表面特征(属性)来描述,例如:绿色的、有 4 条腿、重 10 kg、有外壳,等
- 从所具有的的行为(方法)来描述,例如,它会爬、会吃东西 ''' 将乌龟用代码来表示, 乌龟的表面特征(属性)可以用变量来表示 乌龟的行为特征(方法)可以用函数来表示
'''
class Turtle: # 定义一个Turtle类 一般大写首字母
#定义属性---变量
bodyColor = "绿色" #颜色是绿色
footNum = 4 #有4条腿
weight = 10 #重 10 kg
hasShell = True #有外壳
#定义方法---函数
#会爬
def crawl(self):
print("爬行")
#会吃东西
def eat(self):
print("吃东西")
“类”: class 类名: ''' 类定义的说明文档。主要说明该类的作用,可以通过help函数输出此部分的内容 ''' # 类体 ''' #此处编写类的属性和方法 ''' 注意: 1,无论是属性还是方法,对于类来说都不是必需的 2,类中属性和方法的位置是任意的,它们之间并没有固定的前后次序 3,同属一个类的所有属性和方法,要保持统一的缩进格式 4,和变量名一样,类名本质上就是一个标识符,在给类起名时,需要符合标识符的规则 eg: python 允许创建空类,但没有任何意义.
class Person: # 定义一个人类
'''
这是一个Person类的定义
'''
pass
class Person: # 定义一个人类
'''
这是一个Person类的定义
'''
#定义属性---变量
age = 0 # 类属性,表示人的年龄,默认为0岁
name = '某某某' # 类属性,表示人的名字,默认为某某某
weight = 18 # 类属性,表示人的体重,默认为18公斤
#定义方法---函数
def my_name(self):
print('我的名字是:', self.name)
def learn(self):
print("在学习")
def walk(self):
print("在走路")
def think(self, a, b):
print(a, ' + ', b, ' = ', a + b)
def Information(self):
print("%s今年%d岁,体重%d公斤" % (self.name, self.age, self.weight))
# 创建两个“对象”,分别是Someone_1和Someone_2
Someone_1 = Person()
Someone_2 = Person()
# 调用对象的属性:
# 输出属性
print(Someone_1.name)
print(Someone_1.age)
print(Someone_1.weight)
print(Someone_2.name)
print(Someone_2.age)
print(Someone_2.weight)
#调用对象的方法:
Someone_1.my_name()
Someone_1.walk()
Someone_1.learn()
Someone_2.learn()
Someone_2.think(1, 2)
Someone_2.Information()
输出
某某某
0
18
某某某
0
18
我的名字是: 某某某
在走路
在学习
在学习
1 + 2 = 3
某某某今年0岁,体重18公斤
2. 类构造方法
用类创建一个实例对象时,我们希望在创建的同时给对象的某些属性赋一个==初值==。这就需要在类中添加一个 ==init()== 方法。该方法是一个特殊的类实例方法,称为构造方法(或构造函数)。构造方法用于创建对象时==被自动调用==。
def __init__(self, ...): # 注意,此方法的方法名中,开头和结尾各有 2 个下划线,
# 且中间不能有空格代码块
==注意: 1,即便不添加__init__函数,Python 也会自动为类添加一个仅包含 self 参数的构造方法。 2,仅包含 self 参数的 init() 构造方法,又称为类的默认构造方法。==
class Person: # 定义一个Person类
'''
这是一个Person类的定义
'''
def __init__(self): # __init__函数
print("自动调用了构造方法")
def walk(self):
print("可以走路的")
a = Person() # 构建对象的同时直接调用了__init__函数
输出
自动调用了构造方法
在 init() 构造方法中,除了 self 参数外,还可以自定义其它参数。 参数之间使用逗号“,”进行分割。
class Person: # 定义一个Person类
role = 'person' # 类属性,表示人类这个类的role都是person
def __init__(self, name): # __init__函数
print("自动调用了构造方法",name)
def walk(self):
print("可以走路的")
a= Person(name='小强') # 构建对象的同时,给对象的属性name赋值
b= Person(name='小h')
# a= Person('小强') # 构建对象的同时,给对象的属性name赋值
# b= Person('小h') # 去掉name也可以
输出
自动调用了构造方法 小强
自动调用了构造方法 小h
==注意: 虽然构造方法中有 self、name这2个参数,但实际需要传参的仅有 name。 也就是说,self 不需要手动传递参数。==
class Person: # 定义一个Person类
role = 'person' # 类属性,表示人类这个类的role都是person
def __init__(self, name): # __init__函数
print("自动调用了构造方法",name)
def walk(self):
print("可以走路的")
a= Person(name='小强') # 构建对象的同时,给对象的属性name赋值
b= Person(name='小h')
class Person: # 定义一个Person类
role = 'person' # 类属性,表示人类这个类的role都是person
def __init__(self, name,eight,age,sex,location): # __init__函数
print("自动调用了构造方法",name,eight,age,sex,location)
a= Person('zhangsan',170,30,'man','shanghai')