1.面向对象编程
面向对象编程(Object Oriented Programming,简称:OOP )是一种解决软件复用的设计和编程方法,就是根据现实社会中的事物,抽象出事物的属性和功能,后然将抽象出来的属性和功能封装成对象的属性和方法,在软件中通过复用对象实例提高软件的开发效率 ,很多高级编程语言都遵循面向对象的编程方法。
2.类和对象
- 类:是一类事物的抽象,定义了一类事物的属性和行为
- 类的构成:类名、属性、方法
- 定义: ```python class 类名: def 方法名(self[,参数列表]): 方法体 ……
- 类:是一类事物的抽象,定义了一类事物的属性和行为
注意事项: 1.定义类时,使用class关键字声明这是一个类 2.类名的命名规则:通常按照约定的“大驼峰”命名法。例:class ElectricCar 电动车类 3.定义方法时,方法的第一个参数默认为self,表示对象自身 4.通过对象调用方法时,不需要在方法中传入self参数,python解释器会自动传入
```pythonclass 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__`构造方法- 无参构造方法```pythonclass 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=sexself.age=ageprint("结束初始化对象。。。")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.继承- 面向对象编程的好处之一是代码重用,通过继承机制可以很好的实现代码重用。- 单继承:就是子类只继承一个父类- 格式:```pythonclass 子类名(父类名):
- 特点:子类只会继承父类的非私有属性和非私有方法
#定义动物类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.方法名````pythonclass 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()
- 多继承- 是一个子类可以继承多个父类- 格式:```pythonclass 子类名(父类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()
注:为了提高代码的可读性,多继承中,多个父类内尽量不要定义相同名称的方法
- 当才华还配不上野心,就静下来学习
