初面向对象
一.类属性与对象属性
类中应该仅存储所有对象共有的内容,如所有人的国籍相同那就放到类中
对象中存储每个对象独有的内容,如每个人的名字都不同
二.init方法的作用
init 是初始化的缩写 用于为对象的属性设置初始值
特点:
执行时机:当实例化产生对象时会自动执行该函数
会自动传入需要初始化的对象
初始化必须包含至少一个参数 用于表示对象本身
该函数不允许有返回值 必须为None
三.绑定方法
绑定即两个东西绑在一起
方法就是函数
那就是说绑定方法 == 绑定函数
默认情况下 在类中定义的方法 都是绑定方法
绑定方法 是把函数和对象绑定到一起
为什么要绑定:
每个应用程序其实本质上都是在处理数据,那就必须明确 要处理的数据在哪里,如何处理
绑定方法的好处在于,将需要处理的数据 以及处理数据的方法绑定在一起,这样一来 当你获得一个对象就同时获得 数据以及 相应的处理方法 ,简单的调用即可
四.绑定方法与普通函数的区别
当使用类调用时,就是一个普通函数 有几个参数就得传几个参数
当用对象来调用时,是一个绑定方法了,会自动将对象作为第一个参数传入
一个类中可以有属性和方法
方法分为两种
1.绑定方法
1.1对象绑定方法
在使用对象调用时会自动传入对象本身
1.2类绑定方法
@classmethod
在使用对象调用时会自动传入类本身
在使用类来调用时也会自动传入类本身
单例模式中就会经常使用@classmethod
到底绑定给谁?
当你的方法执行过程中需要使用到对象中数据时就绑定给对象
当你的方法执行过程中需要使用到类中数据时就绑定给类
2.非绑定方法
即不需要对象中的数据 也不需要类中的数据 那就定义为非绑定方法,就是普通函数
@staticmethod
五.继承
继承指的是一种关系,在生活中通过继承关系,例如王思聪继承王健林,对于王思聪可以,可以直接使用王健林已经拥有的
被继承的一方(王健林) 称之为父 继承的一方(王思聪) 称之为子
在OOP中 继承描述是类和类之间的关系 例如b类继承a类 b类可以直接使用a类中的属性和方法
a是父类(基类,超类) b是子类(派生类)
好处:极大的提高了代码的复用性
如何使用继承,至少需要两个类
语法:
class 子类名称(父类名称):
pass
1 class Teacher: 2 school = "oldboy" 3 def __init__(self,name,age): 4 self.name = name 5 self.age = age 6 7 def say_hi(self): 8 print("hello i am %s" % self.name) 9 10 def teach(self): 11 print("正在教书......") 12 13 class Student(Teacher): 14 pass 15 16 print(Student.school) 17 print(Student.say_hi) 18 print(Teacher.say_hi) 19 20 s = Student("rose","123") 21 s.say_hi() 22 s.teach()
六.抽与继承
继承之后可以直接使用父类的属性和方法
使用继承时 应该先抽象 在继承
抽象指的是 将一系列类中相同的特征和相同行为抽取 形成一个新的类
会产生一些与原本业务不想关的类
站在不同角度会得到不同的抽象结果
1 # 抽象得到的公共父类 2 class OldBoyPerson: 3 school = "oldboy" 4 def __init__(self,name,age): 5 self.name = name 6 self.age = age 7 8 def say_hi(self): 9 print("hello i am %s" % self.name) 10 11 class Teacher(OldBoyPerson): 12 def teach(self): 13 print("正在教书......") 14 15 16 class Student(OldBoyPerson): 17 pass 18 19 20 # 测试 21 t = Teacher("owen",38) 22 t.say_hi() 23 t.teach() 24 25 s = Student("歌王",20) 26 s.say_hi()
七.在子类中查找已经的方法和属性
1 class Person: 2 text = "321" 3 def __init__(self,name,age,gender): 4 self.name = name 5 self.age = age 6 self.gender = gender 7 8 def sleep(self): 9 print("人类 午睡 躺着睡!") 10 11 def say_hi(self): 12 print("my name :%s my age :%s my gender: %s " % (self.name,self.age,self.gender),end="") 13 14 15 class Student(Person): 16 text = "123" 17 def __init__(self,name,age,gender,number): 18 #======================================================================重点在这里 19 # 由于父类已经存在一个方法可以完成这个三参数的初始化 20 # 所以可以直接调用父类的初始化完成这部分的初始化工作 21 # 方法1 22 # Person.__init__(self,name,age,gender) # 指名道姓的调用 23 24 # 方法2 在py2中不支持 25 super().__init__(name,age,gender) 26 27 # py2的写法 28 # super(Student, self).__init__(name,age,gender) 29 self.number = number 30 #====================================================================== 31 32 # 访问父类的属性 33 def show_text(self): 34 print(self.text) 35 print(super().text) 36 37 def say_hi(self): 38 super().say_hi() 39 print("my number: %s" % self.number) 40 # print("my name :%s my age :%s my gender: %s my number: %s" % (self.name, self.age, self.gender,self.number)) 41 42 43 s = Student("jack",20,"man","007") 44 s.say_hi() 45 # s.show_text()

浙公网安备 33010602011771号