1.面向对象编程
面向对象编程(Object Oriented Programming,简称:OOP )是一种解决软件复用的设计和编程方法,就是根据现实社会中的事物,抽象出事物的属性和功能,后然将抽象出来的属性和功能封装成对象的属性和方法,在软件中通过复用对象实例提高软件的开发效率 ,很多高级编程语言都遵循面向对象的编程方法。
2.类和对象
- 类:是一类事物的抽象,定义了一类事物的属性和行为
- 类的构成:类名、属性、方法
- 定义: ```python class 类名: def 方法名(self[,参数列表]): 方法体 ……
- 类:是一类事物的抽象,定义了一类事物的属性和行为
注意事项: 1.定义类时,使用class关键字声明这是一个类 2.类名的命名规则:通常按照约定的“大驼峰”命名法。例:class ElectricCar 电动车类 3.定义方法时,方法的第一个参数默认为self,表示对象自身 4.通过对象调用方法时,不需要在方法中传入self参数,python解释器会自动传入
```python
class Cat:
def eat(self):
print("吃鱼。。。")
def drink(self):
print("喝水。。。")
def run(self):
print("跳舞。。。")
- 对象:是通过类创建的一个具体事物,具有状态和行为,可以做具体事情。
对比一个类创建多对象是否相同
xiaobai=Cat()
id(对象)可以获取对象的内存地址
print(“xiaohe的id:{}”.format(id(xiaohe))) print(“xiaobai的id:{}”.format(id(xiaobai)))
- 类与对象的关系:类相当于创建对象的基础条件,根据类可以创建多个对象。
-
<a name="ND8Ci"></a>
### 3.`__init__`构造方法
- 构造方法作用:是在创建一个类的对象时,对对象进行初始化操作。
- python中类的构造方法名称是`__init__`。定义类时,没有显示定义`__init__`构造方法,创建对象时会自动调默认没有参数的`__init__`构造方法
- 无参构造方法
```python
class Cat:
#无参构造方法
def __init__(self):
print("初始化对象。。。")
def eat(self):
print("吃鱼。。。")
def drink(self):
print("喝水。。。")
def run(self):
print("跳舞。。。")
# 创建对象
xiaohe=Cat()
#调用对象的方法
xiaohe.eat()
xiaohe.drink()
xiaohe.run()
- 有参构造方法
class Cat:
#有参构造方法
def __init__(self,sex,age):
print("开始初始化对象。。。")
self.sex=sex
self.age=age
print("结束初始化对象。。。")
def eat(self):
print("吃鱼。。。")
def drink(self):
print("喝水。。。")
def run(self):
print("跳舞。。。")
# 创建对象
xiaohe=Cat("男",1)
print("xiaohe的性别:{},年龄:{}".format(xiaohe.sex,xiaohe.age))
4.访问权限
- python中类的属性和方法的访问权限不需要任何关键字修饰,是通过属性或者方法名前加两个下划线区分:
- 私有访问权限:属性或者方法名前加两个下划线,只能在类内部方法。例:
__name
变量,__eat()
方法 - 公共访问权限:不需要在属性或者方法名前加两个下划线,可以在外部访问。例:
name
变量,eat()
方法 ```python class Cat:有参构造方法
def init(self,sex): print(“开始初始化对象。。。”) self.sex=sex self.age=age #私有属性 print(“结束初始化对象。。。”) def eat(self): print(“吃鱼。。。”) def drink(self): print(“喝水。。。”) def run(self): print(“跳舞。。。”) def get_info(self):调用私有属性和方法
print(“年龄:{}”.format(self.age)) print(“run方法:”,self.run())
- 私有访问权限:属性或者方法名前加两个下划线,只能在类内部方法。例:
创建对象
xiaohe=Cat(“男”,1) xiaohe.get_info()
<a name="TpOAm"></a>
### 5.继承
- 面向对象编程的好处之一是代码重用,通过继承机制可以很好的实现代码重用。
- 单继承:就是子类只继承一个父类
- 格式:
```python
class 子类名(父类名):
- 特点:子类只会继承父类的非私有属性和非私有方法
#定义动物类
class Animal:
def eat(self):
print("吃。。。")
def drink(self):
print("喝。。。")
def run(self):
print("运动。。。")
#定义子类
class Cat(Animal):
#猫除了继承父类属性好行为,还会捉老鼠行为
def catch(self):
print("捉老鼠。。。")
# 创建对象
xiaohe=Cat()
#调用对象的方法
xiaohe.eat()
xiaohe.drink()
xiaohe.run()
xiaohe.catch()
- super函数
定义子类
class BlackCat(Cat):
猫除了继承父类属性好行为,还会捉老鼠行为
def catch(self): Cat.catch(self)
xiaohe=BlackCat() xiaohe.catch()
- `super.方法名`
```python
class Cat(Animal):
#猫除了继承父类属性好行为,还会捉老鼠行为
def catch(self):
print("捉老鼠。。。")
#定义子类
class BlackCat(Cat):
#猫除了继承父类属性好行为,还会捉老鼠行为
def catch(self):
super.catch()
xiaohe=BlackCat()
xiaohe.catch()
- 重写
class Cat(Animal):
猫除了继承父类属性好行为,还会捉老鼠行为
def run(self): print(“跳舞。。。”)
xiaohe=Cat() xiaohe.eat() xiaohe.drink() xiaohe.run()
- 多继承
- 是一个子类可以继承多个父类
- 格式:
```python
class 子类名(父类1,父类2,父类3,...):
class God:
def change(self):
print("百宝箱变东西。。。")
class Cat:
def eat(self):
print("吃铜锣烧。。。")
class Doraemon(God,Cat):
def speak(self):
print("说人话")
a = Doraemon()
a.change()
a.eat()
a.speak()
注:为了提高代码的可读性,多继承中,多个父类内尽量不要定义相同名称的方法
- 当才华还配不上野心,就静下来学习