初面向对象

一.类属性与对象属性

类中应该仅存储所有对象共有的内容如所有人的国籍相同那就放到类中

对象中存储每个对象独有的内容如每个人的名字都不同

 

二.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()

 

posted @ 2019-05-16 21:41  坚信会有奥特曼~  阅读(98)  评论(0)    收藏  举报