课堂笔记
1. ⾯向对象简介
Python是⼀⻔⾯向对象的编程语⾔
所谓⾯向对象的语⾔,简单理解就是语⾔中的所有操作都是通过对象来进⾏ 的
⾯向过程
⾯向过程指将我们的程序分解为⼀个⼀个步骤,通过对每个步骤的抽象来 完成程序
这种编写⽅式往往只适⽤于⼀个功能,如果要实现别的功能,往往复⽤性 ⽐较低
这种编程⽅式符号⼈类的思维,编写起来⽐较容易
⾯向对象的编程语⾔,关注的是对象,⽽不注重过程,对于⾯向对象⼀切皆 对象以上⽅式可以⽤ 孩⼦妈妈给孩⼦买⽠来解决
⾯向对象的编程思想,将所有功能统⼀保存到对应的对象中,要使⽤某个功 能,直接找到对应的对象即可
这种编码⽅式⽐较容易阅读,并且易于维护,容易复⽤。但是编写的过程中 不太符合常规的思维,编写相对麻烦
2. 类(class)
我们⽬前学习的都是Python的内置对象,但是内置对象并不都能满⾜我们的 需求,所以我们在开发中经常要⾃定义⼀些对象
类简单理解它就是相当于⼀个图纸,在程序汇总我们需要根据类来创建对 象。
类就是对象的图纸
我们也称对象是类的实例(instance)
如果多个对象是通过⼀个类创建的,我们称这些对象是⼀类对象
1 # 语法 2 class 类名([⽗类]): 3 pass
类也是⼀个对象,类就是⽤来创建对象的对象
可以像对象中添加变量,对象中的变量称之为属性
语法:对象.属性名 = 属性 值 3. 类的定义 类和对象都是对现实⽣活中事物的抽象 事物包含两部分
- 数据(属性)
- ⾏为(⽅法)
调⽤⽅法 对象.⽅法名()
⽅便调⽤和函数调⽤的区别:如果是函数调⽤,调⽤时有⼏个形参,就会传 递⼏个实参。如果是⽅法调⽤,默认传递⼀个参数,所以⽅法中⾄少得有⼀ 个形参
在类代码块中,我们可以定义变量和函数
变量会成为该类实例的公共属性,所有的该实例都可以通过 对象.属性名 的形式访问
函数会成为该类实例的公共⽅法,所有该类实例都可以通过 对象.⽅法名 的形式访问
# 类名首字母大写
class Chinese:
# 用赋值语句,创建类的属性
eye = 'black'
# 创建实例方法时,不要漏了 self
def eat(self):
print('吃饭,选择用筷子。')
--------------------------------------------------
class Computer:
screen = True
def start(self):
print('电脑正在开机中……')
my_computer = Computer()
print(my_computer.screen)
my_computer.start()
----------------------------------------------------------
# 可以在刚刚创建的Chinese类基础上调用
class Chinese:
# 用赋值语句,创建类的属性
eye = 'black'
# 创建实例方法时,不要漏了 self
def eat(self):
print('吃饭,选择用筷子。')
amy=Chinese()
print(amy.eye)
amy.eat()
--------------------------------------------------------------
class Chinese:
name = '球球' # 类属性name
def say(self, someone): # 带有两个参数的方法
print(someone + '是中国人')
person = Chinese()
print(person.name)
person.say('我')
---------------------------------------------------------
class Chinese:
name = '球球' # 类属性name
def say(self):
print(self.name + '是中国人')
person = Chinese() # 创建Chinese的实例person
person.say() # 调用实例方法
--------------------------------------------------------
class Chinese:
def greeting(self):
print('很高兴遇见你')
def say(self):
self.greeting()
print('我来自中国')
person = Chinese()
# 创建实例person
person.say()
# 调用say()方法
------------------------------------------------------------
#初始化方法,也叫魔术方法 阅读代码后直接运行
class Chinese:
def __init__(self):
print('很高兴遇见你,我是初始化方法')
person = Chinese()
------------------------------------------------------------
class Chinese:
def __init__ (self):
self.mouth = 1 # self.不能丢
self.eye = 2
def body(self):
print('我有%s张嘴巴' % self.mouth)
print('我有%s只眼睛' % self.eye)
person = Chinese()
person.body()
------------------------------------------------------------------
class Chinese:
def __init__(self, name, birth, region):
self.name = name # self.name = '球球'
self.birth = birth # self.birth = '广东'
self.region = region # self.region = '深圳'
def born(self):
print(self.name + '出生在' + self.birth)
def live(self):
print(self.name + '居住在' + self.region)
person = Chinese('球球','广东','深圳') # 传入初始化方法的参数
person.born()
person.live()
--------------------------------------------------------------------------------
class Chinese:
def born(self, name, birthplace):
print(name + '出生在' + birthplace)
def live(self, name, region):
print(name + '居住在' + region)
person = Chinese()
person.born('球球','广东')
person.live('球球','深圳')
-------------------------------------------------------------------------------
class Chinese:
def __init__(self,hometown):
self.hometown=hometown
print('你在哪里出生?')
def born(self):
print('我出生在%s。' % self.hometown)
qiuqiu = Chinese('广东')# 传给参数hometown
qiuqiu.born()
--------------------------------------------------------------------------
class MyClass():
pass
# print(MyClass)
# mc就是通过MyClass创建的对象。mc是MyClass的实例
# mc mc_2 mc_3 mc_4 都是MyClass的实例 他们都是一类对象
mc = MyClass()
mc_2 = MyClass()
# mc_3 = MyClass()
# mc_4 = MyClass()
# # 我们可以通过isinstance() 来检查一个对象是否是另一个类的实例
# r = isinstance(int,MyClass)
#
# print(r)
# print(mc,type(mc))
# 类也是一个对象 用来创建对象的对象
# 类是type类型的对象 定义类实际上就是定义了一个type类型的对象
# print(id(MyClass),type(MyClass))
# 我们可以像对象中添加变量,对象中添加变量我们称之为属性
# 语法:对象.属性名 = 属性值
mc.name = '蜘蛛侠'
mc_2.name = '钢铁侠'
print(mc_2.name)
4. 参数self
4.1 属性和⽅法
类中定义的属性和⽅法都是公共的,任何该类实例都可以访问
属性和⽅法的查找流程
当我们调⽤⼀个对象的属性时,解析器会现在当前的对象中寻找是否还有 该属性,如果有,则直接返回当前的对象的属性值。如果没有,则去当前 对象的类对象中去寻找,如果有则返回类对象的属性值。如果没有就报错
类对象和实例对象中都可以保存属性(⽅法)
如果这个属性(⽅法)是所以的实例共享的,则应该将其保存到类对象中
如果这个属性(⽅法)是摸个实例独有的。则应该保存到实例对象中
⼀般情况下,属性保存到实例对象中 ⽽⽅法需要保存到类对象中
4.2 self
self在定义时需要定义,但是在调⽤时会⾃动传⼊。
self的名字并不是规定死的,但是最好还是按照约定是⽤self
self总是指调⽤时的类的实例