2.2 面向对象,类和魔术方法
文章目录
2.2.1 面向对象和面向过程的区别(了解)
1.面向过程
把编程任务划分成一个一个步骤自己亲自去执行,适合中小项目
2.对象
把构成问题的事物分解成各个对象,适合开发大型项目。
2.2.2 类和对象
1.类
很多事物存在相同的属性和行为(或者方法),我们描述这些共同属性特征的抽象,就叫类。
类包含:属性(姓名,身高,肤色等) 和 方法(上课,上班等)。
2.对象
对象是类的实例
3. 类和对象的关系
类是对象的模具(不占内存空间),对象是类的实例(占内存空间)。
每个对象都要有对应的类。
2.2.3 面向对象编程
1.定义类和方法(重要)
1 定义类
定义类有2种形式,经典类和新式类,
class 类名:
class 类名():
# 以上俩种为经典类(不推荐用),是py2以前使用的定义。现在py3推荐用新式类
class 类名(Object):
方法列表(不是列表,指多个函数定义)
object是Python里所有类最顶级父类,类名命名规则按照大驼峰命名
2.定义方法
定义方法格式(实例方法)为
class 类名(object):
def 方法名(self):
...
方法的格式类似函数,也可以设置参数和返回值,但是需要设置第一个参数为self
编辑器会自动生成self
2.创建对象和调用方法(重要)
1.创建对象
python中,可以根据已经定义的类去创建对象。格式为
对象变量名 = 类名()
我们来打个例子试试看。
class Dog(object):
def Eat(self):
print("啃骨头")
def Drink(self):
print("喝水")
dog1 = Dog()
print(dog1, type(dog1))
输出
<__main__.Dog object at 0x0000013AE9F979D0> <class '__main__.Dog'>
可以看出来,它是一个对象,是Dog类的一个对象,占了一个内存地址。
2.调用方法
调用格式如下
对象.方法名()
我们之前创建的对象,有了对象就能调用类的方法。
class Dog(object):
def eat(self):
print("啃骨头")
def drink(self):
print("喝水")
dog1 = Dog()
print(dog1, type(dog1))
dog1.eat()
dog1.drink()
输出
<__main__.Dog object at 0x0000025C26E579D0> <class '__main__.Dog'>
啃骨头
喝水
多个对象创建也是一样的方法。
3.添加和使用属性
学习如何给对象添加属性和使用属性,对象既有实例方法,也要有自己的属性
3.1.定义,添加属性
定义格式
对象变量名.属性名 = 数据
属性和变量类似,首次赋值会定义属性,再次是修改属性。
dog1.age = 3
print(dog1.age)
输出
3
3.2.使用属性
3.3.私有属性
加下划线1道或者2道的都是定义为私有属性,私有属性不能自动访问?
4.self的作用
知道self参数的作用
1.什么是self
在python类规定中,实现方法的第一个参数,是实例对象本身,并且约定俗称,把其名字叫self。
在某个对象调用其方法时,python解释器会自动把这个对象作为第一个参数传递给方法。
也就是说哪个对象调用这个方法,方法中的self参数就是对象自己。
class Dog(object):
def print_info(self):
print('查看self', id(self))
dog1 = Dog()
print("调用方法前", id(dog1))
dog1.print_info()
print("调用方法后", id(dog1)