day24 类的初始化、绑定方法、继承
今日内容
1、初始化函数
2、绑定方法与非绑定方法
3、绑定方法的特殊之处
4、类的继承
一、初始化函数
1、什么是初始化函数
我们在使用类创建对象时,创建出来的对象都会拥有类中的属性和方法,但是每个对象的属性及方法又不完全相同,
他们有都有自己的属性及方法,那么如何添加对象特有的属性及方法呢?这时就需要使用到类的初始化方法
2、类属性及对象属性
类属性说的是类的属性,其应该是所有对象所共有的属性
对象属性是每个对象特有的属性,单独存储在对象的名称空间中 3、初始化函数__init__()方法
init时初始化的英文缩写,__init__方法用于存储对象自己的属性
在使用类进行实例化对象时,__init__()函数就会执行
执行__init__()函数必须传入一个参数,这个参数就是对象本身(self)
__init__()函数没有返回值,其返回值只能是None
二、绑定方法
1、什么是绑定方法?
绑定方法就是将类的方法与对象或类进行绑定 2、绑定方法与普通函数的区别
绑定方法的函数第一个形参一般是类或者对象本身,在使用类或者对象进行调用时可能不需要为这个参数进行传值,会默认将类或者对象传值给这个参数
普通函数每个形参必须传入实参。 3、类中的方法一共有几种 分别有什么特点?
类中的方法一共有三种:
类绑定方法:@classmethod
在执行方法时,不管是类进行调用还是对象进行调用都不需要为第一个形参传值
对象绑定方法:默认就是对象绑定方法
在执行函数时,如果是类进行调用就是普通函数,需要对第一个形参传入参数,如果是对象调用,就不需要给第一个参数传入参数
非绑定方法:@staticmethod
在执行函数时,不管是类还是对象进行调用,有几个参数就需要传入几个值 4、三种方法使用特点:
如果方法需要类中的数据,则设置为类的绑定方法
如果需要使用到对象中的数据,就设置为对象的绑定方法
如果类及对象中的数据都不需要使用,则设置为非绑定方法 5、举例:
class Person:
age = 10
def __init__(self,name):
self.name = name def a(self):
print("我的名字是:%s"%self.name) @classmethod
def b(cls):
print("这个是:%s"%cls.age) @staticmethod
def c(name):
print("my name is %s" %name) p = Person("lee")
p.a()
Person.a(p) p.b()
Person.b() p.c("li")
Person("li")
三、OOP的三大特性之继承
1、什么是继承
继承指的是一种关系,在现实中儿子可以继承父亲的基因等,在python中继承与现实中的继承基本相同
但是,程序中的继承与现实中的继承又有些许不同,程序中继承表示的是类与类之间的关系
并且python中子类会继承父类的全部属性及方法 例如b类继承a类 b类可以直接使用a类中的属性和方法 a是父类(基类,超类) b是子类(派生类) 好处:极大的提高了代码的复用性 2、语法
class Human:
def __init__(self,name,age):
self.name = name
self.age = age def run(self):
print("%s is running"%self.name) class Student(Human):
pass s = Student("lee",18)
s.run()
3、抽象与继承、object基类
抽象:就是将子类中共同的属性及方法提取出来,再创建一个公共的父类,在让子类全部继承自公共父类。 在编写程序时要先抽象再继承,这样在编写程序时就是产生一些与业务无关的类,但是这些类时必须的,是为了增加代码的复用性 在python中所有的类都是有继承关系的类,如果在创建类时没有继承关系,那么系统会默认让此类继承自object类,
所有的类都会直接或者间接的继承自object类
class OldBoyPerson:
school = "oldboy"
def __init__(self,name,age):
self.name = name
self.age = age def say_hi(self):
print("hello i am %s" % self.name) class Teacher(OldBoyPerson):
def teach(self):
print("正在教书......") class Student(OldBoyPerson):
pass # 测试
t = Teacher("owen",38)
t.say_hi()
t.teach() s = Student("歌王",20)
s.say_hi()
4、名称空间的访问顺序
在使用类实例化对象时,对象属性及方法的访问顺序为:对象自己的名称空间 -> 自己所属类的名称空间 -> 类的父类的名称空间 -> 父类的父类的名称空间 -> .... -> object的名称空间 5、派生与覆盖
派生:子类中具有与父类不相同得方法时就叫做派生
覆盖:
在继承父类的属性或方法中,如果某些属性及方法不能满足使用的需求,那么就需要对父类的方法进行重写
重写的方式是:在子类中定义一个与父类同名的函数,再重新写自己的方法
但是在某些情况下时需要对父类的功能进行扩展,此时就需要完全继承父类的某个方法,再在这个方法的基础上增加新的功能
此时就需要使用super()来继承父类方法的全部部分,并对其进行扩展
实例:
class Person:
text = ""
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender def sleep(self):
print("人类 午睡 躺着睡!") def say_hi(self):
print("my name :%s my age :%s my gender: %s " % (self.name,self.age,self.gender),end="") class Student(Person):
text = ""
def __init__(self,name,age,gender,number):
#======================================================================重点在这里
# 由于父类已经存在一个方法可以完成这个三参数的初始化
# 所以可以直接调用父类的初始化完成这部分的初始化工作
# 方法1:
# Person.__init__(self,name,age,gender) # 指名道姓的调用 # 方法2: 在py2中不支持
super().__init__(name,age,gender) # 方法3: py2的写法
# super(Student, self).__init__(name,age,gender)
self.number = number
#====================================================================== # 访问父类的属性
def show_text(self):
print(self.text)
print(super().text) def say_hi(self):
super().say_hi()
print("my number: %s" % self.number)
# print("my name :%s my age :%s my gender: %s my number: %s" % (self.name, self.age, self.gender,self.number)) s = Student("jack",20,"man","")
s.say_hi()
# s.show_text()
day24 类的初始化、绑定方法、继承的更多相关文章
- Python虚拟机类机制之绑定方法和非绑定方法(七)
Bound Method和Unbound Method 在Python中,当对作为属性的函数进行引用时,会有两种形式,一种称为Bound Method,这种形式是通过类的实例对象进行属性引用,而另一种 ...
- 类属性与对象实现,init方法的作用,绑定方法,绑定方法与普通函数的区别,继承,抽象与继承,派生与覆盖
今日内容: 1.类属性与对象属性 2.init方法的作用 3.绑定方法 4.绑定方法与普通函数的区别(非绑定方法) 5.继承 6.抽象与继承 7.派生与覆盖 1.类属性与对象属性 类中应该进存储所有对 ...
- day33 序列类型,绑定方法,类方法,静态方法,封装继承和多态
Python之路,Day20 = 序列类型,绑定方法,类方法,静态方法,封装继承和多态 序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主要 ...
- python 类的绑定方法和非绑定方法
一.绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的.下面,我们通过实例,来慢慢解析绑定方法的应用. class People: def __ ...
- 全面解析python类的绑定方法与非绑定方法
类中的方法有两类: 绑定方法 非绑定方法 一.绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的.下面,我们通过实例,来慢慢解析绑定方法的应用. ...
- python 面向对象之多态与绑定方法
多态与多态性 一,多态 1,多态指的是一类事物有多种形态(python里面原生多态) 1.1动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.AB ...
- Java技术专区-虚拟机系列-类加载机制(类的初始化)
类加载的生命周期: 加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载 加载 -> 验证 -> 准备 -& ...
- springMVC初始化绑定器
单日期 在处理器类中配置绑定方法 使用@InitBinder注解 在这里首先注册一个用户编辑器 参数一为目标类型 propertyEditor为属性编辑器,此处我们选用 CustomDateEd ...
- python 3全栈开发-面向对象之绑定方法(classmethod与staticmethod的区别)、多态、封装的特性property
一.面向对象绑定方法 一.类中定义的函数分成两大类 1.绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): 1. 绑定到类的方法:用classmethod装饰器装饰的方法. 为类量身定制 ...
随机推荐
- 关于.ssh出错,无法从远程git仓库拉代码
背景:从windows开发环境改到ubuntu,将windows下生成的.ssh文件拷贝到ubuntu下,以clone远程git仓库代码 错误:sign_and_send_pubkey: signin ...
- Microsoft.Practices.Unity使用配置文件总是报错The type name or alias could not be resolved.
Type name could not be resolved. Please check config file http://stackoverflow.com/questions/1493564 ...
- HydroCMS-用ueditor无法实现word中图片转存的问题
图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码目前限chrome浏览器使用首先以um-editor的二进制流保存为例:打开umeditor.js,找到UM ...
- 「CF712E」Memory and Casinos「线段树」「概率」
题解 解法1:(官方做法) 一段区间的\(L\)定义为从最左边开始出发,最左不失败,一直到最右边胜利的概率,\(R\)定义为从最右边开始出发,最左不失败,又回到最右边胜利的概率 考虑一个区间\([l, ...
- maven创建可执行jar包项目的配置
<build> <plugins> <plugin> <artifactId>maven-shade-plugin</artifactId> ...
- 0078 Java与MySQL时间戳传递/存储/协调问题--userLegacyDatetimeCode--userTimezone--serverTimezone
00. 基本问题 0.0 版本: 驱动5.1.47和8.0.17 0.1 MySQL驱动5.1有userLegacyDatetimeCode和userTimezone两个参数, 8.0没有 0.2 J ...
- jQuery动画之显示隐藏动画
1. 显示动画 以下面一个代码示例: <!doctype html> <html lang="en"> <head> <meta char ...
- AGC033D Complexity
题意 给出一个\(n*m\)的\(0,1\)矩阵,若一个矩阵中的所有元素都相同,则这个矩阵的代价为\(0\),如果不是则选择一种将它分成两个子矩阵的方案,代价为所有方案中(两个子矩阵的代价的较大值+\ ...
- python 列表切片之负数的含义代码示例
a = list(range(10)) print(a[::]) #复制一个列表 print(a[::2]) #每隔2个取一次 print(a[::3]) #每隔3个取一次 print(a[::-1] ...
- GDB之常见错误
1. dl-debug.c:74: No such file or directory. 如上图,当使用 gdb 调试执行 r 时,会出现如上打印. 解决方法如下: apt-get install e ...