对象独有的功能
class Person:
h_type = '人类'
def __init__(self,name):
self.name = name
def work(self):
print('%s正在写代码'%self.name)
def others(self,a,b):
print('其他人的工作完成了')
'''
针对对象独有的方法,我们无法实现:
1.方法如果在全局里则不是独有的
2.方法如果在设置在类中也是公共的(谁都可以调)
所以python解释器为了解决此问题:
将定义在类中的函数默认绑定给对象(变为独有的方法)
'''

动静态方法
class Student:
school = '五道口职业技术学院'
def run(self):
print('老八厕所往里跑', self)
@classmethod
def eat(cls):
print('老八吃快餐', cls)
@staticmethod
def sleep(a, b):
print('老八饭后要睡觉')
stu = Student()
stu.eat()
Student.eat()
Student.sleep(1, 2)
面向对象三大特性之继承
继承
- 面向对象有三大特性(继承,封装,多态)
- 继承的含义:
- 用来描述类与类之间数据的关系,类似于现实中人们说的继承家产
- 继承的目的:
- 类的继承关系:
- 被继承的类,我们称为,父类,基类或超类
- 继承了类的类,我们称为,子类或派生类
- 平时最常用的就是父类或者子类
- 怎样实现继承?
class 类名1(类名2):
pass
1.定义类的时候要在类名1后面加括号
2.括号类名2里写的是要继承的类名
3.括号里可以继承多个父类,用逗号隔开
4.在括号里面,从左向右查找每个父类的属性
继承的本质
- 抽象:
- 继承:
- 对象与类的区别
- 1.对象是数据和功能的结合体
- 2.类是多个对象相同的数据和功能的结合体
- 3.父类是多个类相同的数据和功能的结合体
数据和方法的查找顺序
- 不继承
- 先从对象自身查找,没有再去产生对象的类中查找(对象>>>类)
- 单继承
- 先从对象自身查找,产生对象的类中查找,然后是一个个父类(对象>>>类>>>父类)
- 多继承
- 非菱形继承:深度优先(单个分支走到底,在切换分支走到底)
- 菱形继承:广度优先(先走单个分支,遇到分支汇总不走,走其他分支,最后再走汇总的分支)
- (对象>>>类>>>父类)
经典类与新式类
在python3中所有的类默认都会继承object
所以3里面只有新式类
在python2中有经典类和新式类
经典类没有核心的功能 所以到了python3没有了
以后我们在定义类的时候 如果没有想要继承的父类 一般推荐以下写法
class MyClass(object):
pass
目的是为了兼容python2
派生方法
- 子类中定义类与父类一模一样的方法并且扩展了功能叫做派生
class Person:
def __init__(self,name,age,gender)
self.name = name
self.age = age
self.gender = gender
class Teacher(Person):
def __init__(self, name, age, gender, level):
super().__init__(name,age.gender)
self.level = level
l1 = [1, 2, 3]
l1.append('jason')
print(l1)
no!!!!!!!!!!!!
class MyClass(list):
pass
ebj = MyClass()
obj.append('tom')
obj.append('jack')
obj.append('jason')
print(obj)
yes!!!!!!!!!!!
class MyClass():
def append(self,value):
if value == 'jason':
print('jason不能追加')
return
super().append(values)
- 派生图解
